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使用ListView实现滚轮的动画效果实例

    Android使用ListView实现滚轮的动画效果实例

    这篇文章主要介绍了Android使用ListView实现滚轮的动画效果实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 分析CmProcess跨进程通信的实现

    分析CmProcess跨进程通信的实现

    CmProcess是Android一个跨进程通信框架,无需进行bindService()操作,不用定义Service,也不需要定义aidl。 支持IPC级的 Callback,并且支持跨进程的事件总线,可同步获取服务,采用面向接口方式进行服务注册与调用,服务调用方和使用者完全解耦
    2021-06-06
  • 解析在Android中为TextView增加自定义HTML标签的实现方法

    解析在Android中为TextView增加自定义HTML标签的实现方法

    本篇文章是对在Android中为TextView增加自定义HTML标签的方法进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • 如何利用Android仿微博正文链接交互效果

    如何利用Android仿微博正文链接交互效果

    最近在开发中遇到了各种坑,所以分享一下,希望能给大家贡献点经验,下面这篇文章主要给大家介绍了关于如何利用Android仿微博正文链接交互效果的相关资料,需要的朋友可以参考下
    2022-04-04
  • Android SeekBar实现禁止滑动

    Android SeekBar实现禁止滑动

    这篇文章主要为大家详细介绍了Android SeekBar实现禁止滑动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • Android 属性动画ValueAnimator与插值器详解

    Android 属性动画ValueAnimator与插值器详解

    这篇文章主要介绍了Android 属性动画ValueAnimator与插值器详解的相关资料,需要的朋友可以参考下
    2017-05-05
  • TabLayout标题文字不显示的解决操作

    TabLayout标题文字不显示的解决操作

    这篇文章主要介绍了TabLayout标题文字不显示的解决操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Flutter插件开发之HmsScanKit实现示例详解

    Flutter插件开发之HmsScanKit实现示例详解

    这篇文章主要为大家介绍了Flutter插件开发之HmsScanKit实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • java实现静默安装apk

    java实现静默安装apk

    本文给大家分享的是如何实现偷偷的把一个安卓apk应用安装到手机上,而且不显示确认框,主要是通过反射来实现,好了,小伙伴们仔细看下代码吧,有需要的小伙伴可以参考下。
    2015-04-04
  • Android 自定义view仿支付宝咻一咻功能

    Android 自定义view仿支付宝咻一咻功能

    支付宝上有一个咻一咻的功能,就是点击图片后四周有水波纹的这种效果,今天就通过本文给大家分享实现此功能的思路及实例代码,一起看看吧
    2016-12-12

最新评论