Android:在画布上动画显示单个路径的透明度

5
我想在Android画布上动画显示单个路径。
public class MyView extends View {
    private Path paths[];
    protected void onDraw( Canvas canvas ) {
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth( 8 );
        paint.setColor(Color.BLUE);

        Path path = new Path();
        path.moveTo(75, 11);
        path.quadTo(62, 87, 10, 144);
        canvas.drawPath( path, paint );
        paths[0] = path;

        path.reset();
        path.moveTo(50, 100);
        path.lineTo(150, 200);
        canvas.drawPath( path, paint );
        paths[1] = path;
    }
}

现在我有一个paths[]数组,我想分别对每个路径进行动画。我希望它的alpha值像生长一样改变。一开始只有一个小点,然后变成一条线,循环。

这可以做到吗?

怎么做?

1个回答

0
我会添加一个新的浮点数,范围从0到1,用于保持当前动画百分比,并使用它来设置当前的透明度。
public class MyView extends View {
     private Path paths[];
     private float mAnimPercentage = 0.0f;

    private static final int clip(int value){  //forces the value to be between 0 and 255
        return Math.max(0, Math.min(255, value));
    }
    protected void onDraw( Canvas canvas ) {
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth( 8 );
        paint.setColor(Color.BLUE);

        Path path = new Path();
        path.moveTo(75, 11);
        path.quadTo(62, 87, 10, 144);
        //edited here
        paint.setAlpha(clip(mAnimPercentage*255*2));
        canvas.drawPath( path, paint );
        paths[0] = path;

        path.reset();
        path.moveTo(50, 100);
        path.lineTo(150, 200);
        //edited here
        paint.setAlpha(clip(-127 + mAnimPercentage*255*2));   //the biggest is the negative value, the latter this path will show, the biggest is the number multiplied by mAnimPercentage, the fastest this path will get completely opaque
        canvas.drawPath( path, paint );
        paths[1] = path;
        mAnimPercentage+= 0.01; //FIXME this is for TEST only, you should update it with an animator
        postInvalidate();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接