日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 控件发光_Android自定义控件打造闪闪发光字体

發(fā)布時間:2023/12/20 Android 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 控件发光_Android自定义控件打造闪闪发光字体 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

在小米的開機動畫和一些歡迎界面中, 我們經(jīng)常看到這種閃閃發(fā)光的流光字體??雌饋砗莒趴?#xff0c;其實實現(xiàn)原理相當簡單,我們只需要寫自定義控件繼承TextView,然后使用渲染器Gradient設(shè)置顏色漸變和Paint的setShadowLayer方法設(shè)置陰影,然后不斷刷新改變位移即可。

實現(xiàn)

首先寫一個shineTextView類繼承自TextView.

public class ShineTextView extends TextView

{

// 線性漸變渲染

private LinearGradient mLinearGradient;

//環(huán)形漸變渲染

private RadialGradient mRadialGradient;

// 渲染矩陣

private Matrix mGradientMatrix;

// 畫筆

private Paint mPaint;

private int mViewWidth = 0;

// 亮度位移距離

private int mTranslate = 0;

public ShineTextView(Context context, AttributeSet attrs) {

super(context, attrs);

}

在這段代碼中 ,我們定義了兩個顏色渲染器

// 線性漸變渲染

private LinearGradient mLinearGradient;

//環(huán)形漸變渲染

private RadialGradient mRadialGradient;

LinearGradient 是線性漸變渲染 ,代表顏色的漸變呈直線方向遞變。

我們可以使用LinearGradient 來實現(xiàn)上面第二張圖中的效果

RadialGradient 是環(huán)形漸變渲染 ,代表顏色的漸變呈圓環(huán)形遞變。

我們可以使用RadialGradient 來實現(xiàn)上面第一張圖中小米開機動畫的效果。

我們通過控制mTranslate 亮度位移距離來使顏色產(chǎn)生動態(tài)變化的效果。

OnSizeChanged

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh)

{

super.onSizeChanged(w, h, oldw, oldh);

if (mViewWidth == 0 || mViewHeight==0)

{

mViewWidth = getMeasuredWidth();

mViewHeight=getMeasuredHeight();

if (mViewWidth > 0 || mViewHeight>0 )

{

mPaint = getPaint();

// 創(chuàng)建RadialGradient對象

// 第一個,第二個參數(shù)表示漸變圓中心坐標

// 第三個參數(shù)表示半徑

// 第四個,第五個,第六個與線性渲染相同

mRadialGradient = new RadialGradient(50, 50,30, new int[] {

0x11FEB726, 0xffFEB726, 0x33FEB726 }, new float[] { 0,

0.5f, 1 }, Shader.TileMode.CLAMP);

// 創(chuàng)建LinearGradient對象

// 起始點坐標(-mViewWidth, 0) 終點坐標(0,0)

// 第一個,第二個參數(shù)表示漸變起點 可以設(shè)置起點終點在對角等任意位置

// 第三個,第四個參數(shù)表示漸變終點

// 第五個參數(shù)表示漸變顏色

// 第六個參數(shù)可以為空,表示坐標,值為0-1

// 如果這是空的,顏色均勻分布,沿梯度線。

// 第七個表示平鋪方式

// CLAMP重復(fù)最后一個顏色至最后

// MIRROR重復(fù)著色的圖像水平或垂直方向已鏡像方式填充會有翻轉(zhuǎn)效果

// REPEAT重復(fù)著色的圖像水平或垂直方向

mLinearGradient = new LinearGradient(-mViewWidth, 0, 0, 0,

new int[] { 0x33ffffff, 0xffffffff, 0x33ffffff },

new float[] { 0, 0.5f, 1 }, Shader.TileMode.CLAMP);

mPaint.setShader(mRadialGradient);

mPaint.setColor(Color.parseColor("#ffffffff"));

//設(shè)置字體陰影效果

//第一個參數(shù)代表陰影的半徑

//第二個參數(shù)代表陰影在X方向的延伸像素

//第三個參數(shù)代表陰影在Y方向的延伸像素

mPaint.setShadowLayer(3, 2, 2, 0xFFFF00FF);

mGradientMatrix = new Matrix();

}

}

}

在OnSizeChange方法中,我們主要完成一些初始化操作,比如獲取控件寬高、初始化顏色渲染器和設(shè)置字體陰影效果。

onDraw

接下來最后一步,我們只需要在onDraw方法中繪制效果,并且通過Matrix矩陣來使?jié)u變效果產(chǎn)生位移就可以了。

@Override

protected void onDraw(Canvas canvas)

{

super.onDraw(canvas);

if ( mGradientMatrix != null)

{

mTranslateX += mViewWidth / 10;

mTranslateY += mViewHeight / 10;

if (mTranslateX > 2 * mViewWidth || mTranslateY >2*mViewHeight)

{

mTranslateX = -mViewWidth;

mTranslateY = -mViewHeight;

}

mGradientMatrix.setTranslate(mTranslateX, mTranslateY);

// mLinearGradient.setLocalMatrix(mGradientMatrix);

mRadialGradient.setLocalMatrix(mGradientMatrix);

postInvalidateDelayed(50);

}

}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持dt貓。

總結(jié)

以上是生活随笔為你收集整理的android 控件发光_Android自定义控件打造闪闪发光字体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。