国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義View實現餅狀圖帶動畫效果

2019-10-21 21:33:18
字體:
來源:轉載
供稿:網友

一個簡單的自定義view餅狀圖,加入了動畫效果

先看一下效果

Android,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);      }    }  }}

已經加入了詳細的注釋,同樣的原理,還可以將動畫加入到柱形圖等等。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商城县| 临汾市| 扶风县| 鄂伦春自治旗| 老河口市| 通榆县| 永安市| 东莞市| 鄯善县| 定兴县| 鸡西市| 即墨市| 四会市| 温州市| 东明县| 张家港市| 柘荣县| 青岛市| 麦盖提县| 达州市| 丽水市| 洞口县| 和林格尔县| 宁河县| 鹤壁市| 武山县| 永康市| 宿迁市| 贵定县| 喀喇沁旗| 且末县| 汝城县| 高阳县| 佛冈县| 枣阳市| 密山市| 衢州市| 崇义县| 罗源县| 汕尾市| 天全县|