android带动画的饼图,Android自定义View实现饼状图带动画效果

本文介绍了一个在Android中创建带有动画效果的自定义饼状图的实例,通过PointView类实现,详细注释了代码流程,包括颜色判断、弧度计算和动画更新。示例展示了如何将动画应用到图形元素,适用于学习和扩展到其他图形类型。
摘要由CSDN通过智能技术生成

一个简单的自定义view饼状图,加入了动画效果

先看一下效果

16294bb22251d2c8d410ecaa8480929a.gif

下面就直接上代码了

public class Yidong2 extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(new PointView(this));

}

public class PointView extends View {

private int[] p1 = {0, 100, 200}; //存放弧度的数组

//定义存放颜色的数组

private int[] p2 = {Color.GREEN, Color.YELLOW, Color.RED};

Paint paint = new Paint(); //画笔

private float k; //弧度变动后的值

//定义矩形,用户确定描绘的饼状图位置

private final RectF rectF = new RectF(100, 100, 800, 800);

//定义

public PointView(Context context) {

super(context);

paint.setStyle(Paint.Style.FILL); //设置画笔为填充

paint.setStrokeWidth(10f); //设置画笔宽度

paint.setAntiAlias(true); //抗锯齿

//属性动画

ValueAnimator animator = ValueAnimator.ofFloat(0, 360);

animator.setDuration(1000); //设置动画时间

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

k = (float) animation.getAnimatedValue(); //获取变动后的值

invalidate(); //刷新布局

}

});

animator.start(); //启动动画

}

@SuppressLint("DrawAllocation")

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//这里做了不同颜色的范围判断,还可以进行封装,为了便于学习,就没有再次封装

if (k < p1[1]) {

shezhi(canvas, 0);

} else if (k < p1[2]) {

shezhi(canvas, 1);

} else {

shezhi(canvas, 2);

}

}

//动画方法,Android的动画有三种,View动画,帧动画,属性动画,

//这里对动画方法进行简单的封装,只需要明白,如果存在多个颜色的话,在绘制第二个以后颜色时,每次都要先绘制先前所有颜色,再绘制当前颜色,即可理解,这也就是动画的基本逻辑。

private void shezhi(Canvas canvas, int n) {

for (int i = 0; i <= n; i++) {

paint.setColor(p2[i]);

canvas.drawArc(rectF, p1[i], k - p1[i], true, paint);

}

}

}

}

已经加入了详细的注释,同样的原理,还可以将动画加入到柱形图等等。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2018-12-13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值