我想在我的应用程序中使用动画来慢慢地绘制图像 - 就像人类正在使用铅笔一样。在此先感谢!
答案 0 :(得分:2)
如果你有一个代表这种绘图的点数组,只需在画布上画一条线,然后在动画线程中逐一添加这些点。
我喜欢为比线条宽度更接近的点绘制圆圈(它看起来不那么锯齿状)......
这样的事情:
for (Point pB : points) {
if(pB == null){
pA = null;
continue;
}
double dist = getDistance(pA,pB);
if(pA != null && dist > lineWidth){
canvas.drawCircle(pB.x, pB.y, (float)lineWidth, paint);
canvas.drawLine(pA.x, pA.y, pB.x, pB.y, paint);
}
else
canvas.drawCircle(pB.x, pB.y, (float)lineWidth, paint);
pA = pB;
// //Log.d(TAG, "Painting: "+point);
}
点将是Point的临时列表,您将继续从代表整个绘图的主列表中添加。
编辑:
所以,你有一个点数组就是你的整个绘图
Point [] myDrawing{a,b,c,d,e,f.........};
和定义线
的PaintPaint paint = new Paint(); //设置线条应该是什么样的所有值
然后你开始一个睡眠时间为50毫秒的动画线程,每当它醒来时,它会从你的绘图中再抽出一点像这样......
Thread draw = new Thread(){
public void run(){
int curPoint = 0;
while(curPoint < myDrawing.length){
//call the drawing loop I defined above but modify it to only use points 0 - curPoint
drawPointsZeroThroughCurPoint(curPoint);
++curPoint;
sleep(50);
}
}
}
};
draw.start();
答案 1 :(得分:0)
您需要使用点列表制作某种形式的路径,然后将“铅笔”从第一个移到最后一个。 阅读java中的链表,这很简单,一切都很清楚。唯一的问题是制作路径。您可能需要在PC中编写一些工具才能将图像转换为路径。 实现这种效果的另一种方法,但有点大胆,是在图片的边缘选择随机点,对它们进行排序,然后从开始到结束移动铅笔。