我有一个自定义视图,我想在其周围绘制路径,如边框。 但是边界应该逐渐消失,就像蛇的大小一样。 目的是将其用作玩家在游戏中移动的计时器。
我使用Path类和方法lineTo和addArc来绘制边框。
timerPath = new Path();
timerPath.moveTo(getTranslationX() + width / 2, getTranslationY() + 3);
timerPath.lineTo(getTranslationX() + width - 10, getTranslationY() + 3);
timerPath.addArc(new RectF(getTranslationX() + width - 20, getTranslationY() + 3,
getTranslationX() + width - 3, getTranslationY() + 20), -90f, 90f);
...
...
timerPath.lineTo(getTranslationX() + width / 2, getTranslationY() + 3);
timerPaint = new Paint();
timerPaint.setColor(Color.GREEN);
timerPaint.setStyle(Paint.Style.STROKE);
timerPaint.setStrokeWidth(6);
我在onDraw中使用了drawPath()方法:
canvas.drawPath(timerPath, timerPaint);
看起来很好。
现在,我想知道是否有办法使用百分比(10%,11%,12%......等)绘制部分路径。 然后,我将能够为绘图设置动画。
如果不可能,是否有另一种动画边框绘制方式? (用作计时器)
感谢您的帮助。
答案 0 :(得分:8)
您可以使用PathMeasure类来执行此操作。从路径创建PathMeasure
对象,测量长度,然后使用getSegment()
返回可以绘制到画布的部分路径:
float percentage = 50.0f; // initialize to your desired percentage
PathMeasure measure = new PathMeasure(timerPath, false);
float length = measure.getLength();
Path partialPath = new Path();
measure.getSegment(0.0f, (length * percentage) / 100.0f, partialPath, true);
partialPath.rLineTo(0.0f, 0.0f); // workaround to display on hardware accelerated canvas as described in docs
canvas.drawPath(partialPath, timerPaint);