Android自定义View实现数字雨效果的全过程

 更新时间:2022年02月18日 09:17:30   作者:Android唐浮  
小时候看时印象最深的就是数字雨了,导致我现在写代码也要是黑屏,下面这篇文章主要给大家介绍了关于Android自定义View实现数字雨效果的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

效果图

在安卓中多种类型的动画,有帧动画、补间动画、属性动画,除此之外,使用自定义的View结合数学公式,就可以绘制出复杂的界面或者动画。这篇文章记录的是仿照黑客帝国的数字雨,来看看效果吧。

实现步骤

准备工作,常量的配置信息

    // 文字的颜色值
    final int DEFAULT_TEXT_COLOR = Color.argb(255, 0, 255, 70);
    // 文字大小
    final int TEXT_SIZE = 24;
    // 普通画笔
    Paint mPaint;
    // 高亮画笔
    Paint mPaintLight;
    // 改变文字的间隔时间
    int switchInternal = interval[random.nextInt(interval.length)];
    // 数字落下的速度
    int speed;

构建显示文本的内容,因为计算机都是由0和1组成,所以这里用0和1代表它的内容数据。

// 构建0和1的字符串
if (contentArray == null) {
    contentArray = new String[2];
    contentArray[0] = "0";
    contentArray[1] = "1";
} 

由于是随机显示,所以使用随机数获取内容

private String getChar() {
            return contentArray[random.nextInt(2)];
        }

由于是自定义View,所以入口就在自定义View的构造函数中。

public NumberView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

在init方法中对上面的配置信息进行初始化,比如创建具体的画笔颜色,文字大小等

private void init() {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setARGB(255, 0, 255, 70);
        mPaint.setTextSize(TEXT_SIZE);
        a = textColor >> 24 & 0xff;
        r = textColor >> 16 & 0xff;
        g = textColor >> 8 & 0xff;
        b = textColor & 0xff;
        mPaint.setARGB(a, r, g, b);

        mPaintLight = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaintLight.setARGB(255, 140, 255, 170);
        mPaintLight.setTextSize(TEXT_SIZE);
    }

在onMeasure方法中测量View的大小,View本身大小多少,这由onMeasure()决定的。

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        if (widthMode == MeasureSpec.EXACTLY) {
            mWidth = widthSize;
        }
        if (heightMode == MeasureSpec.EXACTLY) {
            mHeight = heightSize;
        }
        setMeasuredDimension((int) mWidth, (int) mHeight);
  }

onDraw()定义了如何绘制这个View,所以在onDraw方法中,必须要进行绘制操作,这样才能显示出来动画。

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        render(canvas);
        rain();
    }
    
private void rain() {
    for (int j = 0; j < streams.length; j++) {
        Symbol[] symbols = (Symbol[]) streams[j];
        for (int i = 0; i < symbols.length; i++) {
            Symbol symbol = symbols[i];
            symbol.y = symbol.y >= mHeight ? 0 : symbol.y + symbol.speed;
        }
    }
}

无论是怎样的操作,自定义View总是离不开onMeasure onLayout onDraw的核心方法。比如我们要绘制一幅画,也需要这样设计,它的大小、位置、和绘制成什么样。就像这些代码的方法。 onMeasure:决定视图的大小 onLayout:决定视图的位置 onDraw:绝对如何画视图 本文章心血来潮想到了黑客帝国的动画,就在github上参考了这个项目,参考的代码在传送门,致敬。

总结

到此这篇关于Android自定义View实现数字雨效果的文章就介绍到这了,更多相关Android自定义View实现数字雨内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android实现橡皮筋回弹和平移缩放效果

    Android实现橡皮筋回弹和平移缩放效果

    这篇文章主要为大家详细介绍了Android实现橡皮筋回弹和平移缩放效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Android 开发中根据搜索内容实现TextView中的文字部分加粗

    Android 开发中根据搜索内容实现TextView中的文字部分加粗

    最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。实现方法很简单,下面通过本文给大家分享Android 开发中根据搜索内容实现TextView中的文字部分加粗样式,非常不错,需要的朋友参考下
    2017-03-03
  • Android侧滑菜单和轮播图之滑动冲突问题

    Android侧滑菜单和轮播图之滑动冲突问题

    这篇文章主要介绍了Android侧滑菜单和轮播图之滑动冲突问题,需要的朋友可以参考下
    2017-06-06
  • Android如何获取子View的位置及坐标详解

    Android如何获取子View的位置及坐标详解

    这篇文章主要给大家介绍了关于Android如何获取子View的位置及坐标的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Flutter实现给图片添加涂鸦功能

    Flutter实现给图片添加涂鸦功能

    这篇文章主要介绍了利用Flutter实现给图片添加涂鸦功能,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-01-01
  • Kotlin如何直接使用控件ID原理详析

    Kotlin如何直接使用控件ID原理详析

    这篇文章主要给大家介绍了关于Kotlin如何直接使用控件ID原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Kotlin实现网络图片下载和保存功能

    Kotlin实现网络图片下载和保存功能

    根据Android多线程和网络编程的知识讲解和案例使用,使用Handler消息机制实现网络图片下载,并且保存到模拟器中,强化对Android多线程编程、网络编程和文件读写的理解,这篇文章主要介绍了Kotlin实现网络图片下载和保存功能,需要的朋友可以参考下
    2023-02-02
  • Android实现九宫格手势密码

    Android实现九宫格手势密码

    这篇文章主要为大家详细介绍了Android实现九宫格手势密码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Android开发之splash界面下详解及实例

    Android开发之splash界面下详解及实例

    这篇文章主要介绍了 Android开发之splash界面下详解及实例的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android开发从相册中选取照片的示例代码

    Android开发从相册中选取照片的示例代码

    这篇文章主要介绍了Android开发从相册中选取照片的示例代码,非常具有实用价值,需要的朋友可以参考下
    2017-09-09

最新评论