Android:在画布上为单个Path的alpha设置动画

时间:2011-01-11 02:23:58

标签: android animation canvas path

我想在Android画布上设置一个Path的动画。

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;
    }
}

现在我有路径[],我想分别为每个动画制作动画。我希望它能像生长一样改变alpha。起初只有一个小点,然后它变成一条线,重复。

可以吗?

如何?

1 个答案:

答案 0 :(得分:0)

我会添加一个从0到1的新浮点数,它保持当前的动画百分比并用它来设置当前的alpha

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();
    }
}