0

我正在开发一个允许用户将图像上传到我的服务器的 android 应用程序。在选择屏幕上,我允许他们使用双指缩放来缩放图像,然后他们通过点击它来选择图像。我在实现它时遇到了两个问题。

我遇到的第一个问题是当我使用 anOnClickListener来检测图像何时被点击时。只要我的手指在图像上,这就会阻止我放大或缩小图像。我是这样实现的:

setOnClickListener(new OnClickListener()
{
    public void onClick(View arg0) 
    {
        ToggleSelection();
        invalidate();
    }
});

因为我希望他们即使用手指在图像上仍然能够缩放图像,所以我决定采用我的第二种方法。我添加了一个OnTouchListener

setOnTouchListener(new OnTouchListener()
{
    public boolean onTouch(View v, MotionEvent event) 
    {
        int i = event.getAction();
        Log.d("TouchInfo123","Event action: " + i);
        switch(i & MotionEvent.ACTION_MASK)
        {
        case MotionEvent.ACTION_UP:
        {
            ToggleSelection();
            invalidate();
            break;
        }
        }
        return false;
    }
});

然后我注意到event.getAction()总是返回 0,即MotionEvent.ACTION_DOWN. 所以我转而听MotionEvent.ACTION_DOWN哪个有效。有点儿。

我现在遇到的问题是,当我去缩放图像时,如果我的手指触摸其中一个图像,它会切换选择,这真的很烦人。

我希望能够做以下两件事之一:

使用OnClickListener但允许我ScaleGestureDetector缩放图像,即使我的手指正在触摸图像

或者

使用the 进行OnTouchListener工作,MotionEvent.ACTION_UP以便我知道它们在触发触摸事件时不会缩放。

有什么建议么?

4

1 回答 1

0

我设法解决了这个问题。我无法获得的原因MotionEvent.ACTION_UP是因为我总是返回 false 所以我没有消费该事件。我这样做是为了让它像我预期的那样工作

boolean mouseDown = false;

public boolean onTouchEvent(MotionEvent event) 
{
    switch(event.getAction() & MotionEvent.ACTION_MASK)
    {
    case MotionEvent.ACTION_UP:
    {
        if(mouseDown)
        {
            ToggleSelection();
            invalidate();
            mouseDown = false;
        }
        break;
    }
    case MotionEvent.ACTION_OUTSIDE:
    case MotionEvent.ACTION_CANCEL:
    case MotionEvent.ACTION_POINTER_DOWN:
    case MotionEvent.ACTION_POINTER_UP:
    {
        mouseDown = false;
        break;
    }
    case MotionEvent.ACTION_DOWN:
    {
        mouseDown = true;
        return true;
    }
    }
    return false;
}
于 2012-06-02T00:24:51.280 回答