Android自定義加載動畫-畫兩個(gè)圈圈

Android自定義動畫系列四,今天來分享第四個(gè)自定義Loading動畫(DoubleCircleBuilder),同樣的先起了一個(gè)名字叫 畫兩個(gè)圈圈 ,還是老規(guī)矩先介紹,后上圖。

實(shí)現(xiàn)效果在最后,GIF有點(diǎn)大,手機(jī)流量請三思。

介紹

首先依舊是聲明,做這些動畫的初衷是為了學(xué)習(xí)和分享,所以希望大家可以指點(diǎn)錯(cuò)誤,讓我更好的進(jìn)步。從這里起,我做一個(gè)系列的加載動畫(截止時(shí)間:我放棄的時(shí)候)。
上一個(gè)動畫鏈接:Android自定義加載動畫-旋轉(zhuǎn)的葉子

正文

今天分享的這個(gè)動畫很簡單,適合用于基本的等待界面,或者視頻加載界面,部分代碼如下:

首先還是初始化:

@Override
    protected void initParams(Context context)
    {
        //最大尺寸
        float outR = getAllSize();
        //小圓尺寸
        float inR = outR * 0.6f;
        //初始化畫筆
        initPaint(inR * 0.4f);
        //旋轉(zhuǎn)角度
        mRotateAngle = 0;
        //圓范圍
        mOuterCircleRectF = new RectF();
        mOuterCircleRectF.set(getViewCenterX() - outR, getViewCenterY() - outR, getViewCenterX() + outR, getViewCenterY() + outR);
        mInnerCircleRectF = new RectF();
        mInnerCircleRectF.set(getViewCenterX() - inR, getViewCenterY() - inR, getViewCenterX() + inR, getViewCenterY() + inR);

    }

    /**
     * 初始化畫筆
     */
    private void initPaint(float lineWidth)
    {
        mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mStrokePaint.setStyle(Paint.Style.STROKE);
        mStrokePaint.setStrokeWidth(lineWidth);
        mStrokePaint.setColor(Color.WHITE);
        mStrokePaint.setDither(true);
        mStrokePaint.setFilterBitmap(true);
        mStrokePaint.setStrokeCap(Paint.Cap.ROUND);
        mStrokePaint.setStrokeJoin(Paint.Join.ROUND);
    }

之所以起名字叫畫兩個(gè)圈圈,就是因?yàn)椋@個(gè)動畫就是只畫了兩個(gè)圈圈,嘿嘿??。一個(gè)270度的外圓,一個(gè)90度的內(nèi)圓。繪制如下:


    @Override
    protected void onDraw(Canvas canvas)
    {
        canvas.save();
        //外圓
        canvas.drawArc(mOuterCircleRectF, mRotateAngle % 360, OUTER_CIRCLE_ANGLE, false, mStrokePaint);
        //內(nèi)圓
        canvas.drawArc(mInnerCircleRectF, 270 - mRotateAngle % 360, INTER_CIRCLE_ANGLE, false, mStrokePaint);
        canvas.restore();
    }

最后是旋轉(zhuǎn)動畫,修改每次繪制的角度。


    @Override
    protected void computeUpdateValue(@FloatRange(from = 0.0, to = 1.0) float animatedValue)
    {
        mRotateAngle = (int) (360 * animatedValue);
    }

總結(jié)

小伙伴們,要是想看更多細(xì)節(jié),可以前往文章最下面的Github鏈接,如果大家覺得ok的話,希望能給個(gè)喜歡,最渴望的是在Github上給個(gè)star。謝謝了。

如果大家有什么更好的方案,或者想要實(shí)現(xiàn)的加載效果,可以給我留言或者私信我,我會想辦法實(shí)現(xiàn)出來給大家。謝謝支持。

演示

動畫演示圖

Github:zyao89/ZCustomView

作者:Zyao89;轉(zhuǎn)載請保留此行,謝謝;

個(gè)人博客:https://zyao89.cn

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容