亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android自定義View實(shí)現(xiàn)數(shù)字雨效果的全過(guò)程

 更新時(shí)間:2022年02月18日 09:17:30   作者:Android唐浮  
小時(shí)候看時(shí)印象最深的就是數(shù)字雨了,導(dǎo)致我現(xiàn)在寫代碼也要是黑屏,下面這篇文章主要給大家介紹了關(guān)于Android自定義View實(shí)現(xiàn)數(shù)字雨效果的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

效果圖

在安卓中多種類型的動(dòng)畫,有幀動(dòng)畫、補(bǔ)間動(dòng)畫、屬性動(dòng)畫,除此之外,使用自定義的View結(jié)合數(shù)學(xué)公式,就可以繪制出復(fù)雜的界面或者動(dòng)畫。這篇文章記錄的是仿照黑客帝國(guó)的數(shù)字雨,來(lái)看看效果吧。

實(shí)現(xiàn)步驟

準(zhǔn)備工作,常量的配置信息

    // 文字的顏色值
    final int DEFAULT_TEXT_COLOR = Color.argb(255, 0, 255, 70);
    // 文字大小
    final int TEXT_SIZE = 24;
    // 普通畫筆
    Paint mPaint;
    // 高亮畫筆
    Paint mPaintLight;
    // 改變文字的間隔時(shí)間
    int switchInternal = interval[random.nextInt(interval.length)];
    // 數(shù)字落下的速度
    int speed;

構(gòu)建顯示文本的內(nèi)容,因?yàn)橛?jì)算機(jī)都是由0和1組成,所以這里用0和1代表它的內(nèi)容數(shù)據(jù)。

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

由于是隨機(jī)顯示,所以使用隨機(jī)數(shù)獲取內(nèi)容

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

由于是自定義View,所以入口就在自定義View的構(gòu)造函數(shù)中。

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

在init方法中對(duì)上面的配置信息進(jìn)行初始化,比如創(chuàng)建具體的畫筆顏色,文字大小等

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方法中測(cè)量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()定義了如何繪制這個(gè)View,所以在onDraw方法中,必須要進(jìn)行繪制操作,這樣才能顯示出來(lái)動(dòng)畫。

@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;
        }
    }
}

無(wú)論是怎樣的操作,自定義View總是離不開onMeasure onLayout onDraw的核心方法。比如我們要繪制一幅畫,也需要這樣設(shè)計(jì),它的大小、位置、和繪制成什么樣。就像這些代碼的方法。 onMeasure:決定視圖的大小 onLayout:決定視圖的位置 onDraw:絕對(duì)如何畫視圖 本文章心血來(lái)潮想到了黑客帝國(guó)的動(dòng)畫,就在github上參考了這個(gè)項(xiàng)目,參考的代碼在傳送門,致敬。

總結(jié)

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

相關(guān)文章

  • Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果

    Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android 開發(fā)中根據(jù)搜索內(nèi)容實(shí)現(xiàn)TextView中的文字部分加粗

    Android 開發(fā)中根據(jù)搜索內(nèi)容實(shí)現(xiàn)TextView中的文字部分加粗

    最近遇到一個(gè)需求,需要做一個(gè)搜索功能。搜索的內(nèi)容需要加粗顯示。實(shí)現(xiàn)方法很簡(jiǎn)單,下面通過(guò)本文給大家分享Android 開發(fā)中根據(jù)搜索內(nèi)容實(shí)現(xiàn)TextView中的文字部分加粗樣式,非常不錯(cuò),需要的朋友參考下
    2017-03-03
  • Android側(cè)滑菜單和輪播圖之滑動(dòng)沖突問(wèn)題

    Android側(cè)滑菜單和輪播圖之滑動(dòng)沖突問(wèn)題

    這篇文章主要介紹了Android側(cè)滑菜單和輪播圖之滑動(dòng)沖突問(wèn)題,需要的朋友可以參考下
    2017-06-06
  • Android如何獲取子View的位置及坐標(biāo)詳解

    Android如何獲取子View的位置及坐標(biāo)詳解

    這篇文章主要給大家介紹了關(guān)于Android如何獲取子View的位置及坐標(biāo)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Flutter實(shí)現(xiàn)給圖片添加涂鴉功能

    Flutter實(shí)現(xiàn)給圖片添加涂鴉功能

    這篇文章主要介紹了利用Flutter實(shí)現(xiàn)給圖片添加涂鴉功能,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Kotlin如何直接使用控件ID原理詳析

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

    這篇文章主要給大家介紹了關(guān)于Kotlin如何直接使用控件ID原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Kotlin實(shí)現(xiàn)網(wǎng)絡(luò)圖片下載和保存功能

    Kotlin實(shí)現(xiàn)網(wǎng)絡(luò)圖片下載和保存功能

    根據(jù)Android多線程和網(wǎng)絡(luò)編程的知識(shí)講解和案例使用,使用Handler消息機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)圖片下載,并且保存到模擬器中,強(qiáng)化對(duì)Android多線程編程、網(wǎng)絡(luò)編程和文件讀寫的理解,這篇文章主要介紹了Kotlin實(shí)現(xiàn)網(wǎng)絡(luò)圖片下載和保存功能,需要的朋友可以參考下
    2023-02-02
  • Android實(shí)現(xiàn)九宮格手勢(shì)密碼

    Android實(shí)現(xiàn)九宮格手勢(shì)密碼

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)九宮格手勢(shì)密碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android開發(fā)之splash界面下詳解及實(shí)例

    Android開發(fā)之splash界面下詳解及實(shí)例

    這篇文章主要介紹了 Android開發(fā)之splash界面下詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Android開發(fā)從相冊(cè)中選取照片的示例代碼

    Android開發(fā)從相冊(cè)中選取照片的示例代碼

    這篇文章主要介紹了Android開發(fā)從相冊(cè)中選取照片的示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09

最新評(píng)論