1

我只想抓住两根手指触摸(不得消耗一根手指触摸)。不幸的是,我需要消耗“单指触摸”才能获得“两指触摸”事件。我希望我是清楚的。

这是我的代码:

@Override
public boolean onTouch(View v, MotionEvent m)
{
    boolean consumed = false;
    int pointerCount = m.getPointerCount();
    int action = m.getActionMasked();

    if(pointerCount == 2)
    {
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_POINTER_DOWN:
                consumed = true;

                break;
            case MotionEvent.ACTION_UP:
                // Work
                break;
            case MotionEvent.ACTION_MOVE:
                // Some stuff
                break;
            default:
                break;
        }
    }
    else if (pointerCount == 1 && action == MotionEvent.ACTION_DOWN)
    {
        // This is needed to get the 2 fingers touch events... 
        consumed = true;
    }

    return consumed;
}
4

1 回答 1

1

我遇到了类似的问题,并通过在我的顶视图处理所有触摸并将适当的操作传播到下面的视图来解决我的问题。在我的示例中,我有一个覆盖层需要拦截缩放手势(在我的构造函数中附加了一个识别器),同时仍将单个触摸传播到下面的地图视图。我没有将实际的触摸事件发送到我的地图视图,但我已经在我的顶视图中处理了它,并将适当的“平移”动作发送到我下面的视图。

@Override
public boolean onTouchEvent(MotionEvent event) {
    if(event.getPointerCount() == 2) {
        if(event.getActionMasked() == MotionEvent.ACTION_DOWN){
            CameraUpdate update = CameraUpdateFactory.newLatLng(initialCoords);
            //attachedMapFragment.getMap().moveCamera(update);
        }
        scaleGestureDetector.onTouchEvent(event);
    }else{
        if(attachedMapFragment != null) {
            if(event.getActionMasked() == MotionEvent.ACTION_DOWN){
                initialCoords = attachedMapFragment.getMap().getCameraPosition().target;
                lastTouchX = event.getX();
                lastTouchY = event.getY();
            }else if(event.getActionMasked() == MotionEvent.ACTION_MOVE){
                float deltaX = event.getX() - lastTouchX;
                float deltaY = event.getY() - lastTouchY;
                lastTouchX = event.getX();
                lastTouchY = event.getY();
                Projection projection = attachedMapFragment.getMap().getProjection();
                Point center = projection.toScreenLocation(attachedMapFragment.getMap().getCameraPosition().target);
                Point newCenter = new Point(center.x - (int)deltaX, center.y - (int)deltaY);
                LatLng newCoords = projection.fromScreenLocation(newCenter);
                CameraUpdate update = CameraUpdateFactory.newLatLng(newCoords);
                attachedMapFragment.getMap().moveCamera(update);
            }
        }
    }
    return true;
}

这样,我的自定义视图上有一个比例识别器,而地图仍在适当地平移以进行单点触摸。实际上,地图视图根本没有任何接触,我的自定义视图正在“路由”如上所示的操作。虽然并不总是理想的,但这在许多情况下可以解决问题。

于 2015-08-03T08:27:27.307 回答