0

OnTouchEvent を受け入れるための surfaceView を作成しました。このビューでは、Button.draw(Canvas) を使用して手動でボタンを描画します (ViewGroup を作成しません)。

これで、このボタンを SurfaceView に描画できますが、KeyEvent を OnTouchEvent から Button.onTouchEvent(keyEvent) のように Button に渡すと、このボタンはクリック効果を表示できません

問題は、キーイベントをビューに手動で渡す方法であり、レイアウトに表示されているものを表示しますか????

何かアイデアはありますか?thx!!

4

1 に答える 1

0

これを行うためのより良い方法があると確信しています...しかし、私はそれを理解できませんでした。だからここに私が思いついたものがあります。

の独自の拡張機能を作成しましたButton。そしてMyButton、 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>

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...それで十分です。

于 2010-09-27T04:34:39.153 に答える