1

我试图在这里分开一些东西。

我有一个带有 Imagebuttons 的程序。他们附加了 onTouchListeners。

我希望触摸事件仅通过触摸触发,而不是单击触发。我的意思是,例如,如果我使用鼠标单击,我不希望附加到 ImageButton 的 onTouch 事件被触发。但是,当您在按钮上单击鼠标时会触发它。

是否可以在触摸发生时触发事件?

我的代码:

myImageButton.setOnTouchListener(new Button.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent arg1) {
                 if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN) {    
                    Toast.makeText(LiVoiceActivity.this,
                                    "You touched me!",
                                    Toast.LENGTH_LONG).show();
                }
                 return true;
            }
    });

谢谢!

4

1 回答 1

0

MotionEvent 类中有一个称为 Tool_Type 的字段。我在这里实现了对鼠标类型的检查:

API 14 又名简单模式

myImageButton.setOnTouchListener(new Button.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent arg1) {
                     if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN
                              && (MotionEvent.TOOL_TYPE_MOUSE != arg1.getToolType(0)) {    
                        Toast.makeText(LiVoiceActivity.this,
                                        "You touched me!",
                                        Toast.LENGTH_LONG).show();
                    }
                     return true;
                }
        });

API 9

myImageButton.setOnTouchListener(new Button.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent arg1) {
                     if (arg1.getAction() == android.view.MotionEvent.ACTION_DOWN
                              && (arg1.getSize() > 1) {    
                        Toast.makeText(LiVoiceActivity.this,
                                        "You touched me!",
                                        Toast.LENGTH_LONG).show();
                    }
                     return true;
                }
        });

现在这会检查收到的 MotionEvent 的大小。据推测,鼠标点击的大小为 1,因此,只能识别大于 1 的大小。玩弄这个数字,看看你是否能区分鼠标和手指触摸。

于 2012-06-27T03:30:52.070 回答