android view的自定义

【android view的自定义】一万年来谁著史,三千里外欲封侯。这篇文章主要讲述android view的自定义相关的知识,希望能为你提供帮助。

public class YanghangCreditCircle extends View {private static final String TAG = "YanghangCreditCircle"; private int resid = R.drawable.credit_report_turntable; public YanghangCreditCircle(Context context) { super(context); init(); }public YanghangCreditCircle(Context context, AttributeSet attrs) { super(context, attrs); TypedArray t = getContext().obtainStyledAttributes(attrs,R.styleable.YanghangCreditCircle); resid = t.getResourceId(R.styleable.YanghangCreditCircle_itembackground,R.drawable.credit_report_turntable); init(); }private void init() { progressPen = new Paint(); progressPen.setAntiAlias(true); progressPen.setStyle(Paint.Style.STROKE); progressPen.setColor(Color.WHITE); progressPen.setStrokeWidth(margin); //画笔框的宽度margin,画笔从中间画circleBmp = BitmapFactory.decodeResource(getResources(), resid); bmpPaint.setAntiAlias(true); }//private float outsidePenSize; private Paint progressPen; private Bitmap circleBmp; private float degress = 0; float margin = UIUtil.INSTANCE.DipToPixels(10); private Paint bmpPaint = new Paint(); @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { float width = circleBmp.getWidth() + (margin) * 2; float height = circleBmp.getHeight() + (margin)*2; widthMeasureSpec = MeasureSpec.makeMeasureSpec((int) width, MeasureSpec.EXACTLY); heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) height, MeasureSpec.EXACTLY); setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); }public void setProgress(float degress){ this.degress = 5f + 205f*degress; postInvalidate(); //刷新onDraw }public void setdegressProgress(float degress) { this.degress = degress; postInvalidate(); } //(0,700] E //(700,840] D //(840,890] C //(890,930] B //(930,1000] A@Override public void onDraw(Canvas canvas) { super.onDraw(canvas); Rect rect = new Rect(); getDrawingRect(rect); int bmpWidth = (int) (circleBmp.getWidth() / 2.0f); int bmpHeight = (int) (circleBmp.getHeight() / 2.0f); Rect dstRect = new Rect(); dstRect.set(rect.centerX() - bmpWidth, rect.centerY() - bmpHeight, rect.centerX() + bmpWidth, rect.centerY() + bmpHeight); //canvas上的目标区域RectF outsideCircleRect = new RectF(dstRect.left + margin/2, dstRect.top + margin/2, dstRect.left + dstRect.width() - margin/2, dstRect.top + dstRect.width() - margin/2); canvas.drawBitmap(circleBmp, null, dstRect, bmpPaint); //显示整个图片在特定的矩形区域内 progressPen.setAlpha(100); canvas.drawArc(outsideCircleRect, 160f, degress, false, progressPen); float tmpDegress = degress; canvas.save(); } }



    推荐阅读