如何将 keyEvent 对象传递给 Button 以使其看起来像被单击?

发布于 2024-09-25 07:09:29 字数 295 浏览 2 评论 0原文

我制作了一个 SurfaceView 来接受 OnTouchEvent,在这个视图中,我使用 Button.draw(Canvas) 手动绘制一个 Button(不是制作 ViewGroup)。

现在,这个按钮可以在我的SurfaceView上绘制,但是当我将一个keyEvent从OnTouchEvent传递到Button(如Button.onTouchEvent(keyEvent))时,但是这个按钮无法显示点击效果,

所以问题是我如何将keyEvent传递给View手动并显示布局中显示的内容???

有什么想法吗?谢谢!!

i have made a surfaceView to accept a OnTouchEvent,and in this view, i draw a Button manually with Button.draw(Canvas)(not make a ViewGroup).

now, this button can be drawn on my SurfaceView, but when i pass a keyEvent from OnTouchEvent to Button like Button.onTouchEvent(keyEvent), but this button cannot show the click effect

so the question is how can i pass the keyEvent to a View manully and it show what it shown in a Layout????

Any ideas?thx!!

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

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

发布评论

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

评论(1

调妓 2024-10-02 07:09:29

我确信有更好的方法来做到这一点......但我无法弄清楚。这就是我的想法。

我创建了自己的 Button 扩展。并在我的 xmls 中创建 MyButton 组件。

<com.stackoverflow.android.example.MyButton android:text="@+id/Button01" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></com.stackoverflow.android.example.MyButton>

您需要将 Button 的每个实例更改为 com.stackoverflow.android.example.MyButton

package com.stackoverflow.android.example;

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.Button;

public class MyButton extends Button {

    final int MSG_MYBUTTON_HIGHLIGHT_ON = 0;
    final int MSG_MYBUTTON_HIGHLIGHT_OFF = 1;

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    Handler mHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case MSG_MYBUTTON_HIGHLIGHT_ON:
                setPressed(true);
                sendEmptyMessageDelayed(MSG_MYBUTTON_HIGHLIGHT_OFF, ViewConfiguration.getPressedStateDuration());
                break;
            case MSG_MYBUTTON_HIGHLIGHT_OFF:
                setPressed(false);
            default:
                break;
            }
        };
    };

    public void performVirtualClick()
    {
        mHandler.sendEmptyMessage(MSG_MYBUTTON_HIGHLIGHT_ON);
        performClick();

    }

}

调用performVirtualClick函数...就可以了。

I'm sure there's a better way to do this...but i couldn't figure it out. So here's what i came up with.

I created my own extension of Button. And create components of MyButton inside my xmls.

<com.stackoverflow.android.example.MyButton android:text="@+id/Button01" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></com.stackoverflow.android.example.MyButton>

You'll need to change every instance of Button to com.stackoverflow.android.example.MyButton.

package com.stackoverflow.android.example;

import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ViewConfiguration;
import android.widget.Button;

public class MyButton extends Button {

    final int MSG_MYBUTTON_HIGHLIGHT_ON = 0;
    final int MSG_MYBUTTON_HIGHLIGHT_OFF = 1;

    public MyButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    Handler mHandler = new Handler(){
        public void handleMessage(android.os.Message msg) {
            switch (msg.what) {
            case MSG_MYBUTTON_HIGHLIGHT_ON:
                setPressed(true);
                sendEmptyMessageDelayed(MSG_MYBUTTON_HIGHLIGHT_OFF, ViewConfiguration.getPressedStateDuration());
                break;
            case MSG_MYBUTTON_HIGHLIGHT_OFF:
                setPressed(false);
            default:
                break;
            }
        };
    };

    public void performVirtualClick()
    {
        mHandler.sendEmptyMessage(MSG_MYBUTTON_HIGHLIGHT_ON);
        performClick();

    }

}

Call the performVirtualClick function...that'll do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文