我想在 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));
}
每一步我都会重新创建整个视图,因此从起点到终点只有一条线可见。我首先担心的是我不知道这个实现是否正确。另外,我希望这些行在创建后作为对象处理。用户应该能够移动它们、旋转它们、删除它们等。我认为我可以通过将每条线的边缘坐标保存在类似于缓冲区的东西中来做到这一点,如果用户非常靠近一个边缘点击我可以处理那个手势。但是所有这些听起来都太复杂了,我不知道这是否不稳定。
我应该使用一些不同的方法来实现我完全缺少的类似的东西吗?