Android自定义控件实现支付宝记账饼图

  

本文实例为大家分享了Android实现支付宝记账饼图,点击旋转到最下面,供大家参考,具体内容如下

  

 Android自定义控件实现支付宝记账饼图”> </p>
  </p> <p>代码:
  
  <pre类=   包com.example.a_102.myapplication7.ui;      进口java.util.ArrayList;   进口并不知道;         进口android.animation.Animator;   进口android.animation.ValueAnimator;   进口android.annotation.TargetApi;   进口android.content.Context;   进口android.graphics.BitmapFactory;   进口android.graphics.Canvas;   进口android.graphics.Color;   进口android.graphics.Paint;   进口android.graphics.Rect;   进口android.graphics.RectF;   进口android.os.Build;   进口android.text.TextUtils;   进口android.util.AttributeSet;   进口android.util.Log;   进口android.view.MotionEvent;   进口android.view.View;   进口android.view.animation.AccelerateInterpolator;      进口com.example.a_102.myapplication7.util.Util;/* *   *   */公开课SelectPieView扩展视图{      私有静态最终字符串标签=癈ustomPie_tag”;   私人int宽度;   私人SelectPieCallBack mCallBack;   私人布尔initPostion=false;/* *   *当前选中的区域   */私人int currentDownPostion;      公共SelectPieView(上下文语境){   超级(上下文);   }      公共SelectPieView(上下文语境,AttributeSet attrs) {   超级(上下文,attrs);   }      公共SelectPieView(上下文语境、AttributeSet attrs int defStyleAttr) {   超级(上下文、attrs defStyleAttr);   }      @Override   保护空白==? +”位置=" + datas.get (i) .getPostion ());      haveRoats。添加(新startAndRoatData (datas.get (i) .getPostion() % 360,开始结束));      开始=+终端+ emptysize开始;      }      textPaint.setStrokeWidth (Util.dip2px (getContext (), 1));/* *画图片*/for (int i=0;我& lt;haveRoats.size ();我+ +){   startAndRoatData startAndRoatData=https://www.yisu.com/zixun/haveRoats.get(我);      浮动x=0;   浮动y=0;      如果(!isRun & & currentDownPostion==haveRoats.get (i) .getPostion () & & datas.size ()> 1) {      x=(浮动)(数学   .cos(数学。π/180 * (startAndRoatData.getStartAng () + startAndRoatData.getRoatAng ()/2))   * (mIntRoot + mPaintWid/2) + mOutRoot);   y=(浮动)(数学   .sin(数学。π/180 * (startAndRoatData.getStartAng () + startAndRoatData.getRoatAng ()/2))   * (mIntRoot + mPaintWid/2) + mOutRoot);   其他}{   x=(浮动)(数学   .cos(数学。π/180 * (startAndRoatData.getStartAng () + startAndRoatData.getRoatAng ()/2))   * (mIntRoot + mPaintWid/2 - betweenSize) + mOutRoot);   y=(浮动)(数学   .sin(数学。π/180 * (startAndRoatData.getStartAng () + startAndRoatData.getRoatAng ()/2))   * (mIntRoot + mPaintWid/2 - betweenSize) + mOutRoot);   }      矩形矩形=new矩形((int) (x - mPaintWid/3), (int) (y - mPaintWid/3), (int) (x + mPaintWid/3),   (int) (y + mPaintWid/3));      int宽度=BitmapFactory.decodeResource (getresource (), datas.get (i) .getIcon ()) .getWidth ();//L=n(圆心角度数)×π(圆周率)×r(半径)/180(角度制)   如果(startAndRoatData.getRoatAng() *数学。π* (mIntRoot + mPaintWid/2)/180>宽度){   canvas.drawBitmap (BitmapFactory.decodeResource (getresource (), datas.get (i) .getIcon ()), null,矩形,   零);   }   }      textPaint.setStyle (Paint.Style.FILL);   textPaint.setTextSize (Util.dip2px (getContext (), 14));/* *写文字*/画布。drawText (mTitle,宽/2 - (textPaint.measureText (mTitle))/2,   宽/2 - Util.dip2px (getContext (), 8), textPaint);      textPaintSubTitle.setTextSize (Util.dip2px (getContext (), 20));   canvas.drawText (mSubTitle   宽/2 - (textPaintSubTitle.measureText (mSubTitle))/2 - (textPaintSubTitleDot.measureText (“。”+ mSubTitleDot)/2),   宽/2 + Util.dip2px (getContext (), 15), textPaintSubTitle);      textPaintSubTitleDot.setTextSize (Util.dip2px (getContext (), 15));   canvas.drawText (“。”+ mSubTitleDot,   宽/2 + textPaintSubTitle.measureText (mSubTitle)/2 - (textPaintSubTitleDot.measureText (“。”+ mSubTitleDot))/2,   宽/2 + Util.dip2px (getContext (), 15), textPaintSubTitleDot);//Toast.makeText (getContext (), "==" + textPaint.measureText (mSubTitle) Toast.LENGTH_SHORT),告诉();/* *测试基线*//*   * paint.setColor (Color.BLACK);   * paint.setStrokeWidth (Util.dip2px (getContext (), 1));   *   *画布。画直线(0,宽/2,宽,宽/2,油漆);   *画布。画直线(宽/2 0宽/2,宽度、油漆);   *//* *   *初始化位置   * */如果(! initPostion) {   initPostion=true;      startAndRoatData roatData=https://www.yisu.com/zixun/haveRoats.get (0);   浮动currentCenterAng=roatData.getStartAng () + roatData.getRoatAng ()/2;   如果(currentCenterAng

Android自定义控件实现支付宝记账饼图