区分单击并在imageview上绘制

时间:2014-07-22 07:06:54

标签: android android-imageview android-image

要求:

如果用户单击图片,我想显示弹出窗口,

enter image description here

如果用户触摸意味着我应该允许他在该图像上绘制一些内容,如下面的

enter image description here

发生了什么现在:有时候,如果我单击一下,它就可以让我在imageview上绘制。

预期的一个:

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

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.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent e) {

    int action = e.getAction();

        switch (action) {
        case MotionEvent.ACTION_DOWN:

            Log.i("ACTION_DOWN","ACTION_DOWN") ;
          x1 = e.getX();
          y1 = e.getY();

          break;
        case MotionEvent.ACTION_MOVE:

            Log.i("ACTION_MOVE","ACTION_MOVE") ;

          x2 = e.getX();
          y2 = e.getY();
         onDraw();

          imageview.invalidate();
          x1 = x2;
          y1 = y2;

          break;

        case MotionEvent.ACTION_UP:

            Log.i("ACTION_UP","ACTION_UP") ;

            d.show();

          break;
        case MotionEvent.ACTION_CANCEL:

            Log.i("ACTION_CANCEL","ACTION_CANCEL") ;

          break;
        default:
          break;
        }
        return true;    
    }
});

//在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);
            }

        }

1 个答案:

答案 0 :(得分:0)

有两种方法可以区分时间和距离。时间意味着看到DOWN和UP事件之间需要多长时间。点击应该相当快。平局应该花费更多时间。通过节省用户触摸的时间并查看启动所需的时间,您可以决定是将移动作为绘图处理还是作为手指的噪声/抖动处理。

另一个是距离。无论何时触摸,您的手指都会意外移动几个像素 - 难以保持完全静止且触摸屏不是100%准确。你可以做的是在手指移动了一些最小距离(比如说15个像素)之后才进行绘制,并且只有在它发生之后才将其计为平局。

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