Android 区分在imageview上单击和绘制

Android 区分在imageview上单击和绘制,android,android-imageview,android-image,Android,Android Imageview,Android Image,要求: 我想显示弹出窗口,如果用户做单键点击图像如下 如果用户触摸意味着我应该允许他在图片上画一些东西,如下图所示 现在发生的事情:有时候,如果我单击一下,它会允许我在imageview上绘图,而不是弹出窗口 需要一个: 1] 。如果用户单击imageview,我想显示弹出窗口 2] 。如果用户在imageview上触摸和移动,应允许用户在选定图像上绘制 有什么帮助吗 代码片段 //创建对话框的步骤 String [] options = new String [] {"Take From

要求:

我想显示弹出窗口,如果用户做单键点击图像如下

如果用户触摸意味着我应该允许他在图片上画一些东西,如下图所示

现在发生的事情:有时候,如果我单击一下,它会允许我在imageview上绘图,而不是弹出窗口

需要一个:

1] 。如果用户单击imageview,我想显示弹出窗口

2] 。如果用户在imageview上触摸和移动,应允许用户在选定图像上绘制

有什么帮助吗

代码片段

//创建对话框的步骤

String [] options  = new String [] {"Take From camera", "Choose From Gallery"};
ArrayAdapter<String> adapter = new ArrayAdapter<String> (getActivity(), android.R.layout.select_dialog_item,options);
AlertDialog.Builder b  = new AlertDialog.Builder(getActivity());
b.setTitle("Select Image");
AlertDialog d = b.create();
//在imageview上绘制某些内容的代码

public void onDraw(){
        if(thePic!=null){
         Bitmap   bmp = Bitmap.createBitmap(imageview.getWidth(), imageview.getHeight(), Config.ARGB_8888);
           Canvas  c = new Canvas(bmp);
            imageview.draw(c);
            Paint pnt = new Paint();
            pnt.setStrokeWidth((float) 4);
            pnt.setColor(Color.GREEN);
            c.drawLine(x1, y1, x2, y2, pnt);
            imageview.setImageBitmap(bmp);
            }

        }

这里有两种方法来区分时间和距离。时间意味着看从一次失败到一次成功需要多长时间。轻敲应该相当快。平局需要更多的时间。通过节省用户触地的时间并查看上升所需的时间,您可以决定是将移动处理为绘图还是手指的噪音/抖动

另一个是距离。你的手指在任何时候触摸时都会意外移动几个像素——很难保持完全静止,触摸屏也不是100%准确。你可以做的是,直到手指移动了一些最小距离(比如15像素)后才开始画图,然后再将其作为画图进行计算


基本上,您可以使用其中一个或两个模式来决定您处于何种模式,并通过查看该模式以不同的方式对未来的触摸事件做出反应。我通常喜欢使用距离,因为它更容易编码-如果您使用时间,并且用户在计时器启动之前移动了手指,则您可能会丢失数据,或者您必须存储数据,以便在最终确定触摸类型时使用。

使用OnTouchListener根据motionEvent进行绘制,和onclick事件的onclick监听器。使用这个@Rod_Algonquin我发布了我的代码,请检查谢谢你的回放。你能告诉我如何找到距离和时间吗?时间-它在运动事件中。将关闭的时间保存在类变量中,并与当前正在处理的事件的时间进行比较。距离-同样的事情。保存向下事件的x和y,并与当前事件进行比较。一旦超过最小距离,请将自己设置为绘图模式,而不是单击模式。
public void onDraw(){
        if(thePic!=null){
         Bitmap   bmp = Bitmap.createBitmap(imageview.getWidth(), imageview.getHeight(), Config.ARGB_8888);
           Canvas  c = new Canvas(bmp);
            imageview.draw(c);
            Paint pnt = new Paint();
            pnt.setStrokeWidth((float) 4);
            pnt.setColor(Color.GREEN);
            c.drawLine(x1, y1, x2, y2, pnt);
            imageview.setImageBitmap(bmp);
            }

        }