Android自定義view之利用drawArc方法實現(xiàn)動態(tài)效果(思路詳解)
前言
前幾天看了一位字節(jié)Android工程師的一篇博客,他實現(xiàn)的是歌詞上下滾動的效果,實現(xiàn)的關鍵就是定義一個偏移量,然后根據(jù)情況去修改這個值,最后觸發(fā)View的重繪來達到效果。于是今天根據(jù)這個思路來寫一篇簡單的文章。歡迎留言
一、準備
在這之前呢,還是得簡單描述一下自定義view中的一些準備工作
1.測量
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = w; mHeight = h; useWidth = mWidth; if (mWidth > mHeight) { useWidth = mHeight; } }
2.初始化畫筆
private void initPaint() { //初始化 mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(0x88FF0000); mPaint.setStrokeWidth(4); //初始化 mFramePaint = new Paint(); mFramePaint.setAntiAlias(true); mFramePaint.setStyle(Paint.Style.STROKE); mFramePaint.setStrokeWidth(0); }
3.自定義屬性
這個案例因為時間關系就不自定義屬性了,更多請參考本人以前的文章:Android自定義view之圍棋動畫
二、關鍵方法介紹
drawArc
此方法中共有五個參數(shù)
- oval :指定圓弧的外輪廓矩形區(qū)域。
- startAngle: 圓弧起始角度,單位為度。
- sweepAngle: 圓弧掃過的角度,順時針方向,單位為度,從右中間開始為零度。
- useCenter:為True時,在繪制圓弧時將圓心包括在內(nèi),通常用來繪制扇形。
- paint: 繪制圓弧的畫板屬性。
三.實現(xiàn)
1.思路
通過改變sweepAngle(上述方法第三個參數(shù))的值,然后刷新View來達到效果
代碼如下:
mSweep += SWEEP_INC; if (mSweep > 360) { mSweep -= 360; } //刷新View invalidate();
2.效果圖
源碼
MySampleView.java
public class MySampleView extends View { private int mWidth; private int mHeight; private int useWidth, minwidth; private Paint mPaint; private Paint mFramePaint; private RectF mBigOval; private float mStart; private float mSweep; private static final float SWEEP_INC = 2; public MySampleView(Context context) { super(context); } public MySampleView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MySampleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public MySampleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } private void init() { initPaint(); } private void initPaint() { //初始化 mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(0x88FF0000); mPaint.setStrokeWidth(4); //初始化 mFramePaint = new Paint(); mFramePaint.setAntiAlias(true); mFramePaint.setStyle(Paint.Style.STROKE); mFramePaint.setStrokeWidth(0); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mWidth = w; mHeight = h; useWidth = mWidth; if (mWidth > mHeight) { useWidth = mHeight; } } @Override protected void onDraw(Canvas canvas) { init(); //定義一個最小標識 minwidth = useWidth / 10; mBigOval = new RectF(minwidth, minwidth, minwidth*9, minwidth*9); //繪制背景 canvas.drawColor(Color.WHITE); canvas.drawRect(mBigOval, mFramePaint); canvas.drawArc(mBigOval, mStart, mSweep, true, mPaint); mSweep += SWEEP_INC; if (mSweep > 360) { mSweep -= 360; } //刷新View invalidate(); } }
到此這篇關于Android自定義view之利用drawArc方法實現(xiàn)動態(tài)效果的文章就介紹到這了,更多相關Android自定義view實現(xiàn)動態(tài)效果內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Android使用ListView實現(xiàn)滾輪的動畫效果實例
這篇文章主要介紹了Android使用ListView實現(xiàn)滾輪的動畫效果實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06解析在Android中為TextView增加自定義HTML標簽的實現(xiàn)方法
本篇文章是對在Android中為TextView增加自定義HTML標簽的方法進行了詳細的分析介紹。需要的朋友參考下2013-05-05Android 屬性動畫ValueAnimator與插值器詳解
這篇文章主要介紹了Android 屬性動畫ValueAnimator與插值器詳解的相關資料,需要的朋友可以參考下2017-05-05Flutter插件開發(fā)之HmsScanKit實現(xiàn)示例詳解
這篇文章主要為大家介紹了Flutter插件開發(fā)之HmsScanKit實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11