91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何自定義View實現數字雨效果

發布時間:2022-02-18 10:42:24 來源:億速云 閱讀:241 作者:iii 欄目:開發技術

今天小編給大家分享一下Android如何自定義View實現數字雨效果的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

效果圖

在安卓中多種類型的動畫,有幀動畫、補間動畫、屬性動畫,除此之外,使用自定義的View結合數學公式,就可以繪制出復雜的界面或者動畫。這篇文章記錄的是仿照黑客帝國的數字雨,來看看效果吧。

Android如何自定義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:決定視圖的位置 

以上就是“Android如何自定義View實現數字雨效果”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中宁县| 邵阳县| 阜南县| 清水河县| 淮北市| 揭阳市| 绥中县| 扎囊县| 洛浦县| 光山县| 高淳县| 大荔县| 平江县| 湟源县| 清丰县| 汾阳市| 六盘水市| 长治市| 响水县| 东莞市| 文山县| 高阳县| 新巴尔虎左旗| 博白县| 全州县| 汶川县| 玛纳斯县| 平泉县| 承德县| 阿瓦提县| 苗栗市| 西乡县| 海丰县| 彭泽县| 丰镇市| 洛浦县| 建德市| 临潭县| 灵宝市| 白水县| 樟树市|