2014-02-26 28 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

相關問題