一个简单的自定义view饼状图,加入了动画效果
先看一下效果
下面就直接上代码了
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);
}
}
}
}
孢子2生物进化中文版(Spores)
孢子2生物进化中文版让我们来做一回疯狂的博士,打造一个属于自
叫我万岁爷九游官方版
叫我万岁爷带你体验当换地点感觉,全新的模拟手游大作让你开始一
梦回凤歌
梦回凤歌手游中你将步入古代的宫廷纷争之中,本想度过美好幸福的
洋果子店rose最新版本
洋果子店最新版是一款十分容易让人垂涎的开店经营类手游。游戏玩
明日大亨最新版
明日大亨手游,一个非常经典有趣的模拟经营类型的商战手游,在游