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

我实现的思路:

1.继承ImageView类

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

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

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

//代表ImageView上的一点

public class ViewPoint

{

float x;

float y;

}

//表示一条线

public class Line

{

ArrayList points = new ArrayList();

}

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

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

public class HandWritingImageView extends ImageView

{

private Paint paint;

//当前正在画的线

private Line current = new Line();

//所有画过的线

private ArrayList lines = new ArrayList();

}

随后重写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上随意画线涂鸦的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值