只消耗两个手指触摸

时间:2014-09-18 09:38:07

标签: android ontouch

我想抓住两根手指触摸(一根手指触摸不得消耗)。 不幸的是,我需要消费"一根手指触摸"为了得到两个手指触摸"事件。 我希望我能说清楚。

这是我的代码:

@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;
}

1 个答案:

答案 0 :(得分: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;
}

这样,我的自定义视图上有一个缩放识别器,而地图仍然适当地平移到单触。实际上,地图视图根本没有任何触动,我的自定义视图是"路由"如上所述的行动。虽然并不总是理想,但在许多情况下这可以解决问题。