我有一个自定义布局缩放缩放代码作为父级和子布局来处理点击功能。因此我使用触摸拦截,但问题是,它不知道何时点击或拖动。
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
switch (ev.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
startClickTime = System.currentTimeMillis(); //start time when first finger land
Log.i("Zoom", " actionDown");
if ( scale > MIN_ZOOM){
mode = Mode.DRAG;
startX = ev.getX() - prevDx;
startY = ev.getY() - prevDy;
}
return false; //go to child layout
case MotionEvent.ACTION_POINTER_DOWN:
mode = Mode.ZOOM;
return true;
case MotionEvent.ACTION_UP:
long clickDuration = System.currentTimeMillis() - startClickTime;
mode = Mode.NONE;
if(clickDuration < MAX_CLICK_DURATION){
return false;
}
else {
// letting go from drag or zooming
return true;
}
case MotionEvent.ACTION_MOVE:
clickDuration = System.currentTimeMillis() - startClickTime;
if (clickDuration > MAX_CLICK_DURATION){
return true;
}
else {
return false;
}
}
return false;
}
在我的点击功能的子布局中:
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
// primary finger down
return true;
case MotionEvent.ACTION_POINTER_DOWN:
// non-primary finger down
return false;
case MotionEvent.ACTION_CANCEL:
return false;
case MotionEvent.ACTION_UP:
// primary finder up
Intent intent = new Intent(context, DeviceActivity.class);
context.startActivity(intent);
return true;
case MotionEvent.ACTION_POINTER_UP:
// non-primary finger up
return false;
}
有没有办法区分拖动和点击。
答案 0 :(得分:0)
点击和拖动事件有四种状态: 开始 - &gt;继续 - &gt;丢弃 - &gt;结束
DragEvent类提供表示它们的整数:
永远记住,拖动操作需要在屏幕上显示所选项目(您正在拾取内容并移动)。但是在缩放中你没有选择的项目,但你获得的是视图。使用此属性可以区分拖动和缩放操作。
答案 1 :(得分:0)
试试这个:
final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
});
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
};