我试图像这样为我的onTouchListner
实现onLongClickListner
和ImageView
:
imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ShowMessageToast("Long Touch ");
return true ;
}
});
imageView.setOnTouchListener(new ImageView.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
ShowMessageToast("Down ");
break;
case MotionEvent.ACTION_MOVE:
ShowMessageToast("Moved ");
break;
default:
break;
}
return true;
}
但是
onLongClickListner
在我停用onTouchListner
(// comment)之前不起作用。如果
onTouchListner
不作为注释(// ....),则它永远不会显示“长时间触摸”ShowMessageToast("Moved ")
是在Toast中显示消息的功能。 最佳答案
LongClickListener
和TouchListener
相互干扰,因为长按总是从触摸(ACTION_DOWN
)开始。您想在TouchListener
中检测到哪种手势?
如果您希望(例如)与滚动一起检测长按,则可以使用TouchListener和GestureListener进行处理。这是如何执行此操作的示例:
findViewById(R.id.myImageView).setOnTouchListener(new OnTouchListener() {
private GestureDetector gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Log.d("TEST", "onScroll");
// TODO Auto-generated method stub
return super.onScroll(e1, e2, distanceX, distanceY);
}
/* (non-Javadoc)
* @see android.view.GestureDetector.SimpleOnGestureListener#onLongPress(android.view.MotionEvent)
*/
@Override
public void onLongPress(MotionEvent e) {
Log.d("TEST", "onLongPress");
// TODO Auto-generated method stub
super.onLongPress(e);
}
// ... implement here other callback methods like onFling, onScroll as necessary
});
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.d("TEST", "Raw event: " + event.getAction() + ", (" + event.getRawX() + ", " + event.getRawY() + ")");
return gestureDetector.onTouchEvent(event);
}
});
备注
这仅实现了onTouchListener,而无需
onLonGClickListener
。 TouchListener
只是将所有触摸事件传递给手势侦听器。每当检测到手势之一时,手势侦听器就会收集手势并调用回调方法。手势可以是:滚动,猛击,点击(单击-确认不是双击或无需等待),双击,长按。
我的代码显示了一个长按和滚动的示例。仅在需要检测其他手势时实施其他回调。