Android - 自定义视图上的 OnClick 不触发

发布于 2025-01-04 00:39:06 字数 1148 浏览 0 评论 0原文

我正在制作一个动态壁纸,其中包含从视图扩展的所有对象和自定义对象的线程绘制。问题是我的自定义视图不会在单击时触发...

以下是代码片段:

在我的壁纸服务类中,OnTouch 被赋予我的绘画线程:

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

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

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 做出反应之前就被捕获了?但不知道为什么......

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

Yumi

I'm working on a Livewallpaper with a Thread Painting all Objects and Custom Objects extended from View. The Problem is that my custom view doesn't fire on click....

Here are the Code Snippeds:

in my WallpaperService Class the OnTouch ist given to my Painting Thread:

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

Then in the constructor of my PaintingThread I'm creating instances of my custom view:

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));
    }

Then in the Constructor of my Obj:

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

The Class implements OnClickListener.

But when I'm logging the onClick nothing happens....:

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

I'm getting crazy because I tried so much, but nothing worked... :( Please help me.
I think the OnClick is catched before my Obj can react?? But don't know why....

I hope I gave you all details needed...

Yumi

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伴随着你 2025-01-11 00:39:06

以下代码有效。您的 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");       
}}

主文件

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

The following code works. Have you on the Activity a other 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" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文