一、前言
上篇文章写了关于根据触屏绘制图片的文章SurfaceView高性能绘制(三)代码实践篇-根据触屏绘制图片,那么如果我们要把每次绘制的图片都保持住在界面上呢,该怎么实现?为了方便说明自己查阅单独写成一篇博文
二、代码实现
思路:把绘制信息弄成一个对象,然后把这个对象放在集合里面,然后进行轮询绘制
1、首先定义一个图像对象
//图像对象
public class DrawingItem{
int x, y;
boolean isVertical, isHorizontal;//运动方向(垂直方向、水平方向)
public DrawingItem(int x, int y, boolean isVertical, boolean isHorizontal) {
this.x = x;
this.y = y;
this.isVertical = isVertical;
this.isHorizontal = isHorizontal;
}
}
2、然后定义一个图像对象数组,把每次得到的图像对象添加进来
private List<DrawingItem> locations;//图像对象数组
Random random = new Random();
//方向随机生成。在触摸的位置创建一个新的条目,该条目的开始方向是随机的
DrawingItem drawingItem =
new DrawingItem(msg.arg1,msg.arg2,random.nextBoolean(),random.nextBoolean());
locations.add(drawingItem);
贴的是主要代码,locations对象自己在适当的位置实例化
3、最后根据图像对象数组进行迭代,循环绘图
//绘图
if(!isRunning){
return true;//线程没有运行,直接返回
}
//获取画布
Canvas lockCanvas = this.drawingHolder.lockCanvas();//获取加锁的画布(避免线程问题)
if(lockCanvas == null){
break;//如果画布为空,中断
}
lockCanvas.drawColor(Color.BLACK);//清空画布。这里设置画布为黑色
for(DrawingItem item : locations){//循环绘图
//lockCanvas.drawBitmap(iconBitmap, 0, 0, paint);
lockCanvas.drawBitmap(iconBitmap, item.x, item.y, paint);
}
this.drawingHolder.unlockCanvasAndPost(lockCanvas);//解锁画布
三、效果图、源码
(1)效果图
(2)源码
https://download.youkuaiyun.com/download/yudbl/10969302