2014-02-26 36 views
0

这里是我的代码。当我膨胀显示异常的视图名为android.view.InflateException:我的MainActivity类中的二进制XML行#8。也导致应用程序崩溃, 如果在代码中的任何过错?。请帮我android.view.InflateException:XML布局中的二进制XML文件行

main.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

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
//  View bgView = findViewById(R.id.background); 
    } 
} 
+1

请发布异常堆栈跟踪,包括嵌套的“异常引起的”。 – laalto

+0

您是否为您正在尝试开发的应用程序添加了适当的库,如果是,请尝试清理您的项目或重新启动eclipse。或者如果没有,然后检查两次并添加它。 – 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

感谢@GopalRao编辑:) – synapticvoid

相关问题