2011-05-03 53 views
0

我想获得一个面板,其中包含一个图像,我将放置在另一个图像上,当我触摸屏幕顶部(覆盖)图像将通过PoerterDuffXfermode (PorterDuff.Mode)等,无论如何,我已经完成了功能和粉尘感谢在这个论坛上的人提供了一些代码基本上完成我所需要的代码的帮助,但我有一个轻微的问题,球员执行代码,不会让我正确地引用面板类XML放置在预先定义的XML(main.xml中)文件中的面板。它给我一个错误,说明Android LAYOUT xml/java error

自定义视图面板不使用2或3参数视图构造函数; XML属性将不起作用

这就是我的xml在基本比例上的外观(只是外部线性布局中的视图)。

<com.easyscratch.full.Panel 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id ="@+id/easyCustView" 
    android:layout_width="300dp" 
    android:layout_height="300dp" 
    android:visibility="visible" 
    android:focusableInTouchMode="true"/> 

的Java是为其次。(Panel类)

package com.easyscratch.full; 

import android.content.Context; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PorterDuff; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Bitmap.Config; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 

class Panel extends View 
{ 

    private Bitmap mBitmap; 
    private Canvas mCanvas; 
    private Path mPath; 
    private Paint mPaint; 
    Bitmap bitmap; 
    Canvas pcanvas ; 
    int x = 0; 
    int y =0; 
    int r =0; 
    public Panel(Context context) { 
     super(context); 

     Log.v("Panel", ">>>>>>"); 

     setFocusable(true); 
     setBackgroundColor(Color.GREEN); 

     // setting paint 
      mPaint = new Paint(); 
      mPaint.setAlpha(0); 
      mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
      mPaint.setAntiAlias(true); 

      // getting image from resources 
      Resources r = this.getContext().getResources(); 

      Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.foreground_image); 

      // converting image bitmap into mutable bitmap 

       bitmap = Bitmap.createBitmap(295, 260, Config.ARGB_8888); 

       pcanvas = new Canvas(); 
       pcanvas.setBitmap(bitmap);     // drawXY will result on that Bitmap 
       pcanvas.drawBitmap(bm, 0, 0, null); 


    } 

    @Override 
    protected void onDraw(Canvas canvas) { 


    // draw a circle that is erasing bitmap    
     pcanvas.drawCircle(x, y, r, mPaint); 

     canvas.drawBitmap(bitmap, 0, 0,null); 

     super.onDraw(canvas); 

    } 



    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     // set paramete to draw circle on touch event 
     x = (int) event.getX(); 
      y = (int) event.getY(); 

      r =20; 
      // Atlast invalidate canvas 
      invalidate(); 
      return true; 
    } 

} 

BASIC主类呼唤的main.xml

package com.easyscratch.full; 

import android.app.Activity; 
import android.os.Bundle; 

public class easyscratch extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

,,如果只有反刍有人告诉我做什么我错了或者也许替代实现的

public Panel(Context context) { 
    super(context); 

无论如何非常感谢先进的真的会尽快appriciate一些帮助:)

CHEERS GUYS!

回答

1

Panel的构造函数还必须至少有一个AttributeSet字段。

public Panel(Context context, AttributeSet attr){ 
    super.(context, attr); 
+0

感谢您的回复,我补充说,但现在它不会给我错误,它只是在我启动应用程序时崩溃。我使用Galaxy Tab真实设备在2.2版本上测试我的应用程序。 – 2011-05-03 18:40:12

+0

你可能不得不启动DDMS和发布的logcat,看看是什么原因造成死机。 – Maximus 2011-05-03 18:53:04

+0

其优良的,我想通了:)非常感谢您的答复! – 2011-05-03 19:26:24