国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 苏州市| 密山市| 宁乡县| 双柏县| 柘荣县| 玉环县| 永济市| 航空| 五河县| 聂荣县| 黄浦区| 韶山市| 吴川市| 盈江县| 泸水县| 宝兴县| 麻江县| 青海省| 兰西县| 灵石县| 林周县| 武邑县| 古丈县| 大同县| 勐海县| 永修县| 理塘县| 赫章县| 巩义市| 铜川市| 交口县| 大石桥市| 沈丘县| 德令哈市| 大悟县| 屯昌县| 平和县| 拉萨市| 卢龙县| 建昌县| 花莲市|