我想建立在Android的工具,用户可以画在一张图片一些简单的对象(例如线,圆或箭头)。 我开始首先尝试线部分,而事实上我可以画上它取得成功。 的逻辑是,用户点击在一个点上,然后拖动他们的手指,画线。 我用这样一个类(它是基于DonGru的答案在这里 ):
public class DrawView extends View {
Paint paint = new Paint();
float Sx, Sy, Lx, Ly;
public DrawView(Context context, float x1, float y1, float x2, float y2) {
super(context);
paint.setColor(Color.RED);
Sx=x1;
Sy=y1;
Lx=x2;
Ly=y2;
}
@Override
public void onDraw(Canvas canvas) {
canvas.drawLine(Sx, Sy, Lx, Ly, paint);
}
}
从活动的代码,我使用onTouch监听器是这样的:
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Sx1 = event.getX();
Sy1 = event.getY();
return true;
case MotionEvent.ACTION_MOVE:
Cx1 = event.getX();
Cy1 = event.getY();
drawLine();
return true;
case MotionEvent.ACTION_UP:
Lx1 = event.getX();
Ly1 = event.getY();
return true;
}
return false;
}
public void drawLine(){
setContentView(R.layout.show);
ImageView myImage = (ImageView) findViewById(R.id.lastphoto);
myImage.setImageBitmap(rotatedPic);
dv=new DrawView(this, Sx1, Sy1, Cx1, Cy1);
addContentView(dv, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT));
RelativeLayout mRelativeLayout = (RelativeLayout) findViewById(R.id.linear);
mRelativeLayout.setOnTouchListener((OnTouchListener) this);
mRelativeLayout.addView(new Drawer(this));
}
在一举一动我重新创建整个视图,以便从起点到终点只有一条线是可见的。 我首先考虑的是,我不知道这是否实施是正确的。 另外,我想作为创建对象后,这些线路进行处理。 用户应该能够将它们移动,旋转它们,删除等等。我认为,我可以通过按住每条线的边缘的坐标就像一个缓冲器做到这一点,如果用户点击非常接近边缘,我可以处理手势。 但所有这一切听起来太复杂,我不知道这是否是不稳定的。
有,我应该用它来实现这样的事情,我完全错过了一些不同的方法?