How to customize the effect of View imitating QQ Motion steps by Android
This article mainly introduces Android how to customize View imitation QQ movement step effect, has a certain reference value, interested friends can refer to, I hope you can learn a lot after reading this article, the following let the editor take you to understand it.
First, customize the properties:
The custom View code is as follows:
/ * Created by Michael on 2019-11-1. * / public class MyQQStep extends View {private int out_color; private int inner_color; private float width; private float textSize; private int color; private int width01; private int height01; private Paint outPaint; private Paint innerPaint; private Paint textPaint; private float percent; private int step; public MyQQStep (Context context) {this (context,null);} public MyQQStep (Context context, @ Nullable AttributeSet attrs) {this (context, attrs,0) } public MyQQStep (Context context, @ Nullable AttributeSet attrs, int defStyleAttr) {super (context, attrs, defStyleAttr) {super (context, attrs, defStyleAttr); TypedArray array = context.obtainStyledAttributes (attrs,R.styleable.MyQQStep); out_color = array.getColor (R.styleable.MyQQStep_out_color, Color.BLACK); inner_color = array.getColor (R.styleable.MyQQStep_inner_color, Color.RED); width = array.getDimension (R.styleable.MyQStepresume width width.10); textSize = array.getDimensionPixelSize (R.styleable.MyQSteptextwriting size.20) Color = array.getColor (R.styleable.MyQQStep_text_color, Color.GREEN); array.recycle (); initPaint (); percent = 0; step = 5000;} private void initPaint () {outPaint = new Paint (); outPaint.setAntiAlias (true); outPaint.setStyle (Paint.Style.STROKE); outPaint.setStrokeWidth (width); outPaint.setColor (out_color); outPaint.setStrokeCap (Paint.Cap.ROUND); innerPaint = new Paint (); innerPaint.setAntiAlias (true); innerPaint.setStrokeWidth (width); innerPaint.setStyle (Paint.Style.STROKE) InnerPaint.setColor (inner_color); innerPaint.setStrokeCap (Paint.Cap.ROUND); textPaint = new Paint (); textPaint.setAntiAlias (true); textPaint.setColor (color); textPaint.setStyle (Paint.Style.STROKE); textPaint.setTextSize (textSize);} @ Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {/ / super.onMeasure (widthMeasureSpec, heightMeasureSpec); int widthMode = MeasureSpec.getMode (widthMeasureSpec); int heightMode = MeasureSpec.getMode (heightMeasureSpec); if (widthMode = = MeasureSpec.AT_MOST) {} else {width01 = MeasureSpec.getSize (widthMeasureSpec) } if (heightMode = = MeasureSpec.AT_MOST) {} else {height01 = MeasureSpec.getSize (heightMeasureSpec);} setMeasuredDimension ((width01 > height01?height01:width01), (width01 > height01?height01:width01));} @ Override protected void onDraw (Canvas canvas) {super.onDraw (canvas); int realWidth = getWidth () > getHeight ()? getHeight (): getWidth (); int realHeight = getWidth () > getHeight ()? getHeight (): getWidth (); RectF R1 = new RectF (width/2,width/2,realWidth-width/2, realHeight-width/2) Canvas.drawArc (r1Power135); canvas.drawArc (r1135270)); Rect r = new Rect (); String s = step+ ""; textPaint.getTextBounds (smem0lance. Length (), r); int textWidth = r.width (); int textHeight = r.height (); Paint.FontMetricsInt fontMetricsInt = new Paint.FontMetricsInt (); int dy = (fontMetricsInt.bottom-fontMetricsInt.top) / 2fontMetricsInt. Bottoms; int baseLine = textHeight/2+dy+realHeight/2-textHeight/2; int X0 = realWidth/2-textWidth/2 Canvas.drawText;} public void setPercent (float percent,float value) {this.percent = percent; this.step = (int) value; invalidate ();}
Finally, call in the layout and MainActivity:
Private void initView () {final MyQQStep qq_view = findViewById (R.id.qq_step); ValueAnimator animator = ValueAnimator.ofFloat (0pime5000); animator.addUpdateListener (new ValueAnimator.AnimatorUpdateListener () {@ Override public void onAnimationUpdate (ValueAnimator animation) {float p = animation.getAnimatedFraction (); qq_view.setPercent (pmae5000);}}); animator.setDuration (10000); animator.start ();}
Thank you for reading this article carefully. I hope the article "how to customize View to imitate the QQ movement step effect" shared by the editor will be helpful to everyone. At the same time, I also hope that you will support and pay attention to the industry information channel. More related knowledge is waiting for you to learn!