2014-02-26 2 views
0

여기 내 코드입니다. 내가 android.view.InflateException라는 예외를 보여주는보기를 부 풀릴 때 : 내 MainActivity 클래스에서 바이너리 XML 라인 # 8. 또한 응용 프로그램 충돌, 코드의 모든 잘못은? main.xml에android.view.InflateException : XML 레이아웃의 이진 XML 파일 행

나에게 도움 호야 경우

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="@drawable/ic_launcher"> 

    <com.example.newscratch.PaintView 
     android:layout_gravity="center" 
     android:id="@+id/img1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 

PaintView.java

package com.example.newscratch; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Paint.Style; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.PorterDuffXfermode; 
import android.util.DisplayMetrics; 
import android.view.Display; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class PaintView extends View implements OnTouchListener { 
private static final String TAG = "PaintView"; 
Bitmap Bitmap1, Bitmap2; 
Bitmap Transparent; 
Bitmap overlay; 
int X = -100; 
int Y = -100; 
Canvas c2; 
private boolean isTouched = false; 

// List<Point> points = new ArrayList<Point>(); 
Paint paint = new Paint(); 

public PaintView(Activity context) { 
    super(context); 
    initView(context); 
} 

private void initView(Activity context) { 
    setFocusable(true); 
     setFocusableInTouchMode(true); 
     this.setOnTouchListener(this); 
     DisplayMetrics metrics = context.getResources().getDisplayMetrics(); 
     int width = metrics.widthPixels; 
     int height = metrics.heightPixels; 

     Transparent = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
     Bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.main); 
     Bitmap2 = BitmapFactory 
       .decodeResource(getResources(), R.drawable.ic_launcher); 

     c2 = new Canvas(); 
     c2.setBitmap(Transparent); 
      //  c2.drawBitmap(Bitmap1, 0, 0, null); 
     c2.drawBitmap(Bitmap2, 0, 0, paint); 

     paint.setAlpha(0); 
     paint.setStyle(Style.FILL); 
     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT)); 
     paint.setAntiAlias(true); 
} 

private static Point getDisplaySize(final Display display) { 
    final Point point = new Point(); 
    point.x = display.getWidth(); 
    point.y = display.getHeight(); 
    return point; 
} 

@Override 
public void onDraw(Canvas canvas) { 
    System.out.println("onDraw"); 
    c2.drawCircle(X, Y, 50, paint); 
    if(isTouched) 
    { 
     canvas.drawBitmap(Bitmap1, 0, 0, null); 
    } 
    canvas.drawBitmap(Transparent, 0, 0, null); 

} 

public boolean onTouch(View view, MotionEvent event) { 
    isTouched = true; 
    X = (int) event.getX(); 
    Y = (int) event.getY(); 

    invalidate(); 
    return true; 
} 
} 

    class Point { 
float x, y; 

@Override 
public String toString() { 
    return x + ", " + y; 
} 
} 

MainActivity.java

,210
+1

중첩 된 "인한 원인"예외를 포함하여 예외 스택 추적을 게시하십시오. – laalto

+0

그렇다면 프로젝트를 정리하거나 일식을 다시 시작하려는 경우 개발하려는 작업에 적합한 라이브러리를 추가 했습니까? 그렇지 않다면 적절하게 두 번 점검하고 추가하십시오. – InnocentKiller

답변

0

당신은 당신의 PaintView 클래스에서 두 개 더 constrcutors를 정의해야합니다 ... 스택 트레이스없이

public PaintView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initView(context); 
    } 

    public PaintView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initView(context); 
    } 
+0

답장을 보내 주셔서 감사합니다. 그 작업 –

0

, 그것은 쉽게 ... 첫눈에서

은 아니에요 : 적절한 생성자는 PaintView에 없습니다 수업.

이 서명으로 생성자를 추가

public PaintView(Context context, AttributeSet attrs, int defStyle){ 
    super(...); 
    ... 
} 
0

난 당신이 "XML 생성자"를 구현하는 것을 잊었다 생각합니다. 다음을 추가해야합니다.

public PaintView((Context context, AttributeSet attrs) { 
    super(context, attrs); 
    initView(context); 
} 

자세한 내용은 documentation을 참조하십시오.

+0

고마워요 @ GoalRao 편집 :) – synapticvoid

관련 문제