Android自定義View實(shí)現(xiàn)數(shù)字雨效果的全過(guò)程
效果圖
在安卓中多種類(lèi)型的動(dòng)畫(huà),有幀動(dòng)畫(huà)、補(bǔ)間動(dòng)畫(huà)、屬性動(dòng)畫(huà),除此之外,使用自定義的View結(jié)合數(shù)學(xué)公式,就可以繪制出復(fù)雜的界面或者動(dòng)畫(huà)。這篇文章記錄的是仿照黑客帝國(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;
// 普通畫(huà)筆
Paint mPaint;
// 高亮畫(huà)筆
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)建具體的畫(huà)筆顏色,文字大小等
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)畫(huà)。
@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總是離不開(kāi)onMeasure onLayout onDraw的核心方法。比如我們要繪制一幅畫(huà),也需要這樣設(shè)計(jì),它的大小、位置、和繪制成什么樣。就像這些代碼的方法。 onMeasure:決定視圖的大小 onLayout:決定視圖的位置 onDraw:絕對(duì)如何畫(huà)視圖 本文章心血來(lái)潮想到了黑客帝國(guó)的動(dòng)畫(huà),就在github上參考了這個(gè)項(xiàng)目,參考的代碼在傳送門(mén),致敬。
總結(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)漢字轉(zhuǎn)拼音功能 帶多音字識(shí)別
這篇文章主要介紹了android實(shí)現(xiàn)漢字轉(zhuǎn)拼音功能,帶多音字識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
Android 開(kāi)機(jī)應(yīng)用掃描相關(guān)總結(jié)
本篇文章只是作為指南引導(dǎo)去看PkMS,不會(huì)貼大段代碼進(jìn)行分析,更多是基于方法分析實(shí)現(xiàn)的邏輯,另外就是代碼是基于Android 11,與Android 10之前代碼有比較大的差別。2021-05-05
android 中viewpager+fragment仿微信底部TAG完美漸變
這篇文章主要介紹了android 中viewpager+fragment仿微信底部TAG完美漸變,需要的朋友可以參考下2017-05-05
Android編程學(xué)習(xí)之異步加載圖片的方法
這篇文章主要介紹了Android編程學(xué)習(xí)之異步加載圖片的方法,以實(shí)例形式較為詳細(xì)的分析了Android異步加載圖片所涉及的頁(yè)面布局及功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Flutter使用Overlay與ColorFiltered新手引導(dǎo)實(shí)現(xiàn)示例
這篇文章主要介紹了Flutter使用Overlay與ColorFiltered新手引導(dǎo)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android ListView position詳解及實(shí)例代碼
這篇文章主要介紹了Android ListView position的相關(guān)資料,在開(kāi)發(fā)Android 應(yīng)用的時(shí)候你真的用對(duì)了嗎?這里給大家徹底解釋下,需要的朋友可以參考下2016-10-10
Android onActivityResult和setResult方法詳解及使用
這篇文章主要介紹了Android onActivityResult和setResult方法詳解及使用的相關(guān)資料,這里提供實(shí)例,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-12-12
Android 自定View實(shí)現(xiàn)仿QQ運(yùn)動(dòng)步數(shù)圓弧及動(dòng)畫(huà)效果
這篇文章主要介紹了Android自定義view實(shí)現(xiàn)高仿QQ運(yùn)動(dòng)步數(shù)圓弧及動(dòng)畫(huà)效果的實(shí)例代碼,本文涉及到繪制圓弧需要具備的知識(shí)點(diǎn),需要的朋友可以參考下2016-10-10

