要求:
如果用户单击图片,我想显示弹出窗口,
如果用户触摸意味着我应该允许他在该图像上绘制一些内容,如下面的
发生了什么现在:有时候,如果我单击一下,它就可以让我在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);
}
}
答案 0 :(得分:0)
有两种方法可以区分时间和距离。时间意味着看到DOWN和UP事件之间需要多长时间。点击应该相当快。平局应该花费更多时间。通过节省用户触摸的时间并查看启动所需的时间,您可以决定是将移动作为绘图处理还是作为手指的噪声/抖动处理。
另一个是距离。无论何时触摸,您的手指都会意外移动几个像素 - 难以保持完全静止且触摸屏不是100%准确。你可以做的是在手指移动了一些最小距离(比如说15个像素)之后才进行绘制,并且只有在它发生之后才将其计为平局。
基本上,您可以使用其中一个或两个来决定您所处的模式,并通过查看该模式以不同方式对未来的触摸事件作出反应。我通常喜欢使用距离,因为它更容易编码 - 如果您使用时间并且用户在计时器启动之前显着移动了手指,您要么丢失数据,要么在最终确定触摸类型时必须存储它以供使用是