最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義view之利用drawArc方法實(shí)現(xiàn)動(dòng)態(tài)效果(思路詳解)

 更新時(shí)間:2021年08月24日 10:07:01   作者:計(jì)蒙不吃魚  
這篇文章主要介紹了Android自定義view之利用drawArc方法實(shí)現(xiàn)動(dòng)態(tài)效果,drawArc方法包含了五個(gè)參數(shù),具體細(xì)節(jié)在本文中給大家提到過,需要的朋友可以參考下

前言

前幾天看了一位字節(jié)Android工程師的一篇博客,他實(shí)現(xiàn)的是歌詞上下滾動(dòng)的效果,實(shí)現(xiàn)的關(guān)鍵就是定義一個(gè)偏移量,然后根據(jù)情況去修改這個(gè)值,最后觸發(fā)View的重繪來達(dá)到效果。于是今天根據(jù)這個(gè)思路來寫一篇簡單的文章。歡迎留言

一、準(zhǔn)備

在這之前呢,還是得簡單描述一下自定義view中的一些準(zhǔn)備工作

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.自定義屬性

這個(gè)案例因?yàn)闀r(shí)間關(guān)系就不自定義屬性了,更多請(qǐng)參考本人以前的文章:Android自定義view之圍棋動(dòng)畫

二、關(guān)鍵方法介紹

drawArc

此方法中共有五個(gè)參數(shù)

  • oval :指定圓弧的外輪廓矩形區(qū)域。
  • startAngle: 圓弧起始角度,單位為度。
  • sweepAngle: 圓弧掃過的角度,順時(shí)針方向,單位為度,從右中間開始為零度。
  • useCenter:為True時(shí),在繪制圓弧時(shí)將圓心包括在內(nèi),通常用來繪制扇形。
  • paint: 繪制圓弧的畫板屬性。

 三.實(shí)現(xiàn)

 1.思路

通過改變sweepAngle(上述方法第三個(gè)參數(shù))的值,然后刷新View來達(dá)到效果

代碼如下:

  mSweep += SWEEP_INC;
        if (mSweep > 360) {
            mSweep -= 360;
        }
        //刷新View
        invalidate();

2.效果圖

請(qǐng)?zhí)砑訄D片描述

源碼

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();
        //定義一個(gè)最小標(biāo)識(shí)
        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();
    }
}

到此這篇關(guān)于Android自定義view之利用drawArc方法實(shí)現(xiàn)動(dòng)態(tài)效果的文章就介紹到這了,更多相關(guān)Android自定義view實(shí)現(xiàn)動(dòng)態(tài)效果內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

静宁县| 抚远县| 苍梧县| 高邮市| 鄂尔多斯市| 大理市| 上栗县| 壤塘县| 铁岭市| 金乡县| 土默特左旗| 安溪县| 砚山县| 若尔盖县| 高雄市| 岳阳县| 新竹县| 仁布县| 邮箱| 尼木县| 靖远县| 剑河县| 钟山县| 盐城市| 手机| 青铜峡市| 财经| 武宁县| 玛沁县| 宁南县| 五台县| 台安县| 涿州市| 长沙市| 顺义区| 博兴县| 乌鲁木齐县| 安多县| 砚山县| 武夷山市| 乐至县|