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