【问题标题】:Android - OnClick on custom view doesn't fireAndroid - 自定义视图上的 OnClick 不会触发
【发布时间】:2012-02-09 14:47:56
【问题描述】:

我正在使用线程绘制所有对象和从视图扩展的自定义对象的动态壁纸。问题是我的自定义视图在点击时没有触发......

以下是代码片段:

在我的 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);

该类实现 OnClickListener。

但是当我记录 onClick 时没有任何反应....:

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

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

我希望我给了你所有需要的细节......

悠米

【问题讨论】:

标签: android view onclick wallpaper


【解决方案1】:

以下代码有效。您在 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" />

【讨论】:

  • 实际上这对我不起作用,我不知道为什么... :...( 我没有任何活动,因为它是 LiveWallpaper 并且没有正常活动...所以这里怎么了???
  • 最好在构造函数中设置 onClickListener()
  • @Heigo - 构造函数中的 onClickListener 设置不会触发任何事件。我想知道为什么 onClick 在 onDraw 中触发事件而不是在构造函数中。
  • 这个类中有3个构造函数,确定使用哪个构造函数并在那里设置onClickListener()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 2021-11-14
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多