首页 > 系统 > Android > 正文

android中实现在ImageView上随意画线涂鸦的方法

2019-10-21 21:37:54
字体:
来源:转载
供稿:网友

我实现的思路:

1.继承ImageView类

2.重写onTouchEvent方法,在ACTION_MOVE(即移动时),记录下所经过的点坐标,在ACTION_UP时(即手指离开时,这时一条线已经画完),将所画的线(点的集合)保存在一个集合中

3.重写onDraw方法,利用canvas和所记录下的线和点画出线来

可能我讲的十分笼统,下面来看看实际的代码吧

//代表ImageView上的一点public class ViewPoint{  float x;  float y;}//表示一条线public class Line{  ArrayList<ViewPoint> points = new ArrayList<ViewPoint>(); }

如上所示,ViewPoint表示一点,而Line表示一条线

然后在扩展的ImageView类上声明如下:

public class HandWritingImageView extends ImageView{  private Paint paint;  //当前正在画的线  private Line current = new Line(); //所有画过的线  private ArrayList<Line> lines = new ArrayList<Line>(); }

随后重写onTouchEvent方法

@Override public boolean onTouchEvent(MotionEvent event) {  //获取坐标 clickX = event.getX(); clickY = event.getY();  if (event.getAction() == MotionEvent.ACTION_DOWN) {  invalidate();    return true; } else if (event.getAction() == MotionEvent.ACTION_MOVE)  {  ViewPoint point = new ViewPoint();  point.x = clickX;  point.y = clickY;  //在移动时添加所经过的点  current.points.add(point);  invalidate();  return true; } else if (event.getAction() == MotionEvent.ACTION_UP)  {   //添加画过的线  lines.add(current);  current = new Line();     invalidate(); }  return super.onTouchEvent(event); }

可以看到当我们手指移动时,获取保存所经过的点并调用invalidate方法进行屏幕刷新(可以使onDraw方法被调用,稍后可以看到),当我们手指离开时添加之前的所画的线到集合中,并调用invalidate方法

接下来看看所重写的onDraw方法,它利用所保存的线的信息进行画线

@Override  protected void onDraw(Canvas canvas)  {  super.onDraw(canvas); //画出之前所有的线 for (int i = 0; i < lineData.lines.size(); i++) {  drawLine(canvas, lines.get(i)); }   //画出当前的线 drawLine(canvas, current);  }   private void drawLine(Canvas canvas, Line line) { for (int i = 0; i < line.points.size() - 1; i++) {  float x = line.points.get(i).x;  float y = line.points.get(i).y;    float nextX = line.points.get(i + 1).x;  float nextY = line.points.get(i + 1).y;    canvas.drawLine(x, y, nextX, nextY, paint); } }

这样就可以在ImageView上随意涂鸦了,并且还可以通过删除lines中的最后条line来实现撤销功能。

以上这篇android中实现在ImageView上随意画线涂鸦的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表