Android - OnClick自定义视图不会触发

时间:2012-02-09 14:47:56

标签: android view onclick wallpaper

我正在使用线程绘制Livewallpaper,从View扩展所有对象和自定义对象。问题是我的自定义视图不会点击....

以下是Code Snippeds:

在我的WallpaperService类中,OnTouch被赋予我的绘画线程:

    @Override
    public void onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        painting.doTouchEvent(event);
    }

然后在我的PaintingThread的构造函数中,我正在创建自定义视图的实例:

public LiveWallpaperPainting(SurfaceHolder surfaceHolder, Context context) {
    for(int i = 0; i < numberOfObj;i++ ){
        obj.add(new Obj(context,objBitmap, objBitmap2, mCanvasWidth, mCanvasHeight, 32, 32 , 20, 10));
    }

然后在我的Obj的构造函数中:

    super(context);
    this.context = context;
    this.setEnabled(true);
    this.setFocusable(true);
    this.setFocusableInTouchMode(true);
    this.setClickable(true);
    this.setOnClickListener(this);

Class实现了OnClickListener。

但是当我登录onClick时没有任何事情发生....:

@Override
public void onClick(View v) {
    Log.d(TAG, "clicked");
}

我变得疯狂,因为我尝试了很多,但没有任何效果...... :(请帮助我。 我认为在我的Obj可以做出反应之前,OnClick会被捕获吗?但不知道为什么......

我希望我能为您提供所需的所有细节......

由实

1 个答案:

答案 0 :(得分:4)

以下代码有效。你在Activity上有另一个OnClickListener吗?

public class CustomView extends View implements OnClickListener {
Paint paint;

public CustomView(Context context) {
    this(context, null);        
}

public CustomView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
}

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

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    paint = new Paint();
    paint.setColor(Color.BLUE);

    canvas.drawRect(0.f, 0.f, 240.f, 240.f, paint);

    this.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Log.d("CustomView", "Click");       
}}

main.xml中

<com.examples.view.CustomView
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" />