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

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

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

前言

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

一、準(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.自定義屬性

這個案例因為時間關(guān)系就不自定義屬性了,更多請參考本人以前的文章:Android自定義view之圍棋動畫

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

drawArc

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

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

 三.實現(xiàn)

 1.思路

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

代碼如下:

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

2.效果圖

請?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();
        //定義一個最小標(biāo)識
        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方法實現(xiàn)動態(tài)效果的文章就介紹到這了,更多相關(guān)Android自定義view實現(xiàn)動態(tài)效果內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

定日县| 阜宁县| 黄浦区| 东城区| 建瓯市| 荆门市| 西平县| 正蓝旗| 思南县| 石台县| 元阳县| 新蔡县| 松桃| 志丹县| 屯门区| 镇平县| 衡南县| 文安县| 南城县| 堆龙德庆县| 股票| 镇平县| 渝北区| 临潭县| 饶河县| 嵊泗县| 宜春市| 横峰县| 外汇| 万宁市| 靖边县| 六枝特区| 东光县| 金寨县| 乌拉特中旗| 深泽县| 玛曲县| 延津县| 屯留县| 华容县| 兴化市|