【发布时间】:2018-11-20 22:57:47
【问题描述】:
我有一个具有 ViewPager 的活动,并且每个页面都是具有可缩放 imageView 的片段。我已经在可缩放 imageView 的父视图上使用 onTouch 方法实现了拖动以关闭功能,并且拖动工作正常。但我想检查在 dispatchTouchEvent 中是否检测到 2 个数字,然后忽略 onTouch 方法并将触摸传递给子视图,以便我可以缩放图像。我试过写一个如下的类,但它不起作用。我该如何解决这个问题?因此,缩放和拖动不会相互冲突。
谢谢
自定义视图:
public class DraggableRelativeLayout extends RelativeLayout {
private final int THRESHOLD = ScreenUtils.dpToPx(10);
float diffX, diffY;
private float initialXValue;
private float initialYValue;
public DraggableRelativeLayout(Context context) {
super(context);
}
public DraggableRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DraggableRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public DraggableRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
initialXValue = ev.getX();
initialYValue = ev.getY();
// return false;
break;
case MotionEvent.ACTION_MOVE:
diffX = ev.getX() - initialXValue;
diffY = ev.getY() - initialYValue;
if (Math.abs(diffY) <THRESHOLD || ev.getPointerCount() > 1)
return true;
else
return super.dispatchTouchEvent(ev);
//break;
case MotionEvent.ACTION_UP:
break;
}
return super.dispatchTouchEvent(ev);
}
}
onTouchListener:
public class PostDetailTouchListener implements View.OnTouchListener {
public PostDetailTouchListener(Context context, View view, View viewToZoom, OnDragInteractionListener mListener) {
dragView = view;
dragListener = mListener;
zoomView = viewToZoom;
}
@Override
public boolean onTouch(View view2, MotionEvent event) {
// doing my work
}
【问题讨论】:
标签: android ontouchlistener android-touch-event