Java 在Android中设置路径动画?
我正在尝试使用Android的画布和PathMeasure设置路径动画。在每个帧上,路径应从源路径绘制一个路径段,直到整个段完成。产生的效果应该类似于使用钢笔/铅笔/等进行书写。但是,当我使用PathMeasure getSegment时,目标路径似乎不会绘制任何内容 以下代码应以灰色绘制源路径,以红色绘制当前段的终止点,最后以黑色绘制路径子段,但仅绘制源路径和终止点(未绘制段)Java 在Android中设置路径动画?,java,android,android-canvas,Java,Android,Android Canvas,我正在尝试使用Android的画布和PathMeasure设置路径动画。在每个帧上,路径应从源路径绘制一个路径段,直到整个段完成。产生的效果应该类似于使用钢笔/铅笔/等进行书写。但是,当我使用PathMeasure getSegment时,目标路径似乎不会绘制任何内容 以下代码应以灰色绘制源路径,以红色绘制当前段的终止点,最后以黑色绘制路径子段,但仅绘制源路径和终止点(未绘制段) 尝试将rlineto(0,0)添加到分段路径,然后使用画图绘制路径。文档建议在低于4.3的android版本中使用此
尝试将rlineto(0,0)添加到分段路径,然后使用画图绘制路径。文档建议在低于4.3的android版本中使用此方法。此解决方案仅适用于目标sdk小于或等于4.3的情况。只是为了好玩,我们可以看到logcat输出吗?我以前没有使用过
Path
或PathMeasure
,但我的直觉是,整个二次曲线被视为一个“段”,因此如果距离没有封装整个曲线,它就不会返回。getSegment
调用的返回值是多少?logcat输出与您预期的一样d'根据段的长度递增,如果取消对边界代码的注释,则会得到正确的路径边界。getSegment的返回值为true。事实上,只要“开始”和“结束距离”参数不反转(0),则始终为真
public void initialize() {
// Path to animate
source = new Path();
source.moveTo(0f, 10f);
source.quadTo(100, 10, 100, 100);
// temp path to store drawing segments
segment = new Path();
pm = new PathMeasure(source, false);
frames = 10;
increment = pm.getLength() / (float)frames;
Log.d(TAG, "increment " + increment);
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setAntiAlias(true);
paint.setStrokeWidth(5f);
black = new Paint(paint);
black.setColor(Color.BLACK);
gray = new Paint(paint);
gray.setColor(Color.GRAY);
red = new Paint(paint);
red.setColor(Color.RED);
}
@Override
public void onDraw(Canvas c) {
super.onDraw(c);
// draw the source path
c.drawPath(source, gray);
// draw the segment
segment.reset();
pm.getSegment(0, d, segment, true);
c.drawPath(segment, black);
//RectF bounds = new RectF();
//segment.computeBounds(bounds, true);
//Log.d(TAG, "bounds: " + bounds.toString());
// draw the termination point on the segment
float[] pos = new float[2];
float[] tan = new float[2];
pm.getPosTan(d, pos, tan);
c.drawPoints(pos, red);
// update the frame index
frameIndex = (frameIndex + 1) % frames;
d = (float)frameIndex * increment;
Log.d(TAG, "d = " + d);
}