Android自定义view之利用drawArc方法实现动态效果(思路详解)

 更新时间:2021年08月24日 10:07:01   作者:计蒙不吃鱼  
这篇文章主要介绍了Android自定义view之利用drawArc方法实现动态效果,drawArc方法包含了五个参数,具体细节在本文中给大家提到过,需要的朋友可以参考下

前言

前几天看了一位字节Android工程师的一篇博客,他实现的是歌词上下滚动的效果,实现的关键就是定义一个偏移量,然后根据情况去修改这个值,最后触发View的重绘来达到效果。于是今天根据这个思路来写一篇简单的文章。欢迎留言

一、准备

在这之前呢,还是得简单描述一下自定义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

此方法中共有五个参数

  • oval :指定圆弧的外轮廓矩形区域。
  • startAngle: 圆弧起始角度,单位为度。
  • sweepAngle: 圆弧扫过的角度,顺时针方向,单位为度,从右中间开始为零度。
  • useCenter:为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。
  • paint: 绘制圆弧的画板属性。

 三.实现

 1.思路

通过改变sweepAngle(上述方法第三个参数)的值,然后刷新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方法实现动态效果的文章就介绍到这了,更多相关Android自定义view实现动态效果内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android Java调用自己C++类库的实例讲解

    Android Java调用自己C++类库的实例讲解

    今天小编就为大家分享一篇关于Android Java调用自己C++类库的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Android中Paint类和Canvas类的方法汇总

    Android中Paint类和Canvas类的方法汇总

    本文主要介绍了Android中Paint类和Canvas类的方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Android中 service组件详解

    Android中 service组件详解

    Service是Android的四大组件之一,以下是我结合Android Doc和网上资料的学习总结,有不准确的地方请高手指出,互相学习嘛。。。
    2016-08-08
  • Android中网络框架简单封装的实例方法

    Android中网络框架简单封装的实例方法

    在本篇文章里小编给大家整理的是关于Android中网络框架简单封装的实例方法,需要的朋友们可以学习下。
    2020-03-03
  • Android自定义左右或上下滑动翻页效果

    Android自定义左右或上下滑动翻页效果

    这篇文章主要为大家详细介绍了Android自定义左右或上下滑动翻页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android NDK开发(C语言--动态内存分配)

    Android NDK开发(C语言--动态内存分配)

    这篇文章主要介绍了Android NDK开发 C语言--动态内存分配
    2021-12-12
  • Android实现换肤的两种思路分析

    Android实现换肤的两种思路分析

    这篇文章主要介绍了Android实现换肤的两种思路分析,较为详细的分析了Android实现换肤的具体方法,需要的朋友可以参考下
    2015-12-12
  • 你值得拥有的Android Studio开发小技巧

    你值得拥有的Android Studio开发小技巧

    这篇文章主要为大家分享了值得拥有的Android Studio开发小技巧,介绍几个比较好用的技巧和快捷键,提升我们的编码效率,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • android studio实现上传图片到java服务器

    android studio实现上传图片到java服务器

    这篇文章主要为大家详细介绍了android studio实现上传图片到java服务器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Android开发Input系统触摸事件分发

    Android开发Input系统触摸事件分发

    这篇文章主要为大家介绍了Android开发Input系统触摸事件分发示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论