我有几个按钮,我想按下其中一个按钮并拖动另一个按钮。你能告诉我应该使用哪种MotionEvent
或其他功能吗?我正在使用onTouchListener
。
有一个图像,您可以看到我想要做的事情(第一个按钮上的第一个ACTION_DOWN
并拖动仍然按下屏幕的第二个第7个按钮),然后按下每个白色按钮:
下面是我的onTouch按钮代码:
button1 = (Button) findViewById(R.id.button1);
button1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
soundIDs[0] = sound.play(R.raw.sample1);
button1.setBackgroundResource(R.drawable.white_clicked);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
sound.stop(soundIDs[0]);
button1.setBackgroundResource(R.drawable.white);
break;
}
return false;
}
});
答案 0 :(得分:2)
您只在一个按钮上设置OnTouchListener。这不会帮助你知道指针何时移动(例如用户拖动他的手指)到另一个按钮。
您可以在包含按钮的视图上设置OnTouchListener。然后检查ACTION_DOWN,ACTION_MOVE和ACTION_UP事件。然后,您必须进行一些简单的命中检测,以确定要激活的按钮。
有些事情:
getWindow().getDecorView()
.findViewById(android.R.id.content)
.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent event) {
int action = event.getAction();
if (action != MotionEvent.ACTION_DOWN
&& action != MotionEvent.ACTION_MOVE
&& action != MotionEvent.ACTION_UP) return false;
Rect hitRect = new Rect();
Button button;
for(int i = 0; i < myButtons.size(); i++) {
button = myButtons.get(i);
button.getHitRect(hitRect);
if (hitRect.contains((int)event.getX(), (int)event.getY())) {
button.setText("hit!");
}
}
return true;
}
});
其中myButtons是按钮的ArrayList(示例中为钢琴键)。
此外,如果用户的触摸离开按钮但是没有按下另一个按钮,您可能需要修改此功能以正确停用当前激活的按钮。
我在Android设备上测试了上面的代码,其布局连续有3个按钮。在所有按钮上拖动手指会使每个按钮的文本更改为“点击!”
就像我上面所说,你只是在一个按钮上设置了触摸监听器,这是行不通的。在这个例子中,我在活动的整个视图中设置了触摸监听器。