有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java安卓扩展和触摸问题

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

我遇到的第一个问题是当我使用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一起工作,这样我知道当触发触摸事件时,它们不会进行缩放

有什么建议吗


共 (1) 个答案

  1. # 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;
    }