【问题标题】:Android scaling and touch issueAndroid缩放和触摸问题
【发布时间】:2012-06-02 08:24:51
【问题描述】:

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

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

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 缩放图像,即使我的手指正在触摸图像

OnTouchListenerMotionEvent.ACTION_UP 一起工作,这样我就知道它们在触发触摸事件时不会缩放。

有什么建议吗?

【问题讨论】:

    标签: java android ontouchlistener onclicklistener


    【解决方案1】:

    我设法解决了这个问题。我无法获得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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-09
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多