欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android自定義控件打造閃閃發(fā)光字體

 更新時間:2017年01月09日 16:38:18   作者:aNotFound404  
這篇文章主要為大家詳細介紹了Android自定義控件打造閃閃發(fā)光字體,具有一定的參考價值,感興趣的小伙伴們可以參考一下

介紹

在小米的開機動畫和一些歡迎界面中, 我們經(jīng)??吹竭@種閃閃發(fā)光的流光字體??雌饋砗莒趴?,其實實現(xiàn)原理相當(dāng)簡單,我們只需要寫自定義控件繼承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);
    }
  }

源碼下載:http://xiazai.jb51.net/201701/yuanma/AndroidShineText(jb51.net).rar

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

相關(guān)文章

  • Android編程之分辨率處理相關(guān)代碼段合集

    Android編程之分辨率處理相關(guān)代碼段合集

    這篇文章主要介紹了Android編程之分辨率處理相關(guān)代碼段合集,涉及Android針對分辨率的計算與轉(zhuǎn)換等相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Android實現(xiàn)文件存儲并讀取的示例代碼

    Android實現(xiàn)文件存儲并讀取的示例代碼

    本篇文章主要介紹了Android實現(xiàn)文件存儲的示例代碼,文件內(nèi)容可以分別存儲在手機內(nèi)存和外存中,并且都可以讀去取出來,有興趣的可以了解一下。
    2017-01-01
  • Android 解決使用SearchView時軟鍵盤不支持actionSearch的問題

    Android 解決使用SearchView時軟鍵盤不支持actionSearch的問題

    本文主要介紹使用SearchView時軟鍵盤不支持actionSearch,這里提供了解決方案,希望能幫助開發(fā)Android應(yīng)用的同學(xué)
    2016-07-07
  • Android實現(xiàn)讀取掃碼槍內(nèi)容(條形碼)

    Android實現(xiàn)讀取掃碼槍內(nèi)容(條形碼)

    這篇文章主要為大家詳細介紹了Android實現(xiàn)讀取掃碼槍內(nèi)容、條形碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Android ProgressBar組件使用教程

    Android ProgressBar組件使用教程

    Android ProgressBar分為水平進度條和圓形進度條, 看官方的劃分是Indeterminate Progress(不確定的進度) 和 Determinate Progress(決定進度)下面有2個demo一個是圓形的進度條和一個水平的進度條
    2022-11-11
  • Android ConstraintLayout約束布局使用實例介紹

    Android ConstraintLayout約束布局使用實例介紹

    ConstraintLayout是Google在Google I/O 2016大會上發(fā)布的一種新的布局容器(ViewGroup),它支持以靈活的方式來放置子控件和調(diào)整子控件的大小,下面這篇文章主要給大家介紹了關(guān)于Android中ConstraintLayout約束布局詳細解析的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Android端實現(xiàn)單點登錄的方法詳解

    Android端實現(xiàn)單點登錄的方法詳解

    所謂單點登錄就是指的同一個賬戶(id)不能在一個以上的設(shè)備上登錄對應(yīng)的用戶系統(tǒng)(排除web端和移動端可以同時登錄的情況),例如:用戶m在A設(shè)備登錄并保持登錄狀態(tài),然后又在B設(shè)備登錄,此時A應(yīng)該要強制下線,m無法在A設(shè)備上繼續(xù)執(zhí)行用戶相關(guān)的操作,下面來一起看看吧。
    2016-11-11
  • Android自定義FloatingActionButton滑動行為只隱藏不出現(xiàn)的問題小結(jié)

    Android自定義FloatingActionButton滑動行為只隱藏不出現(xiàn)的問題小結(jié)

    這篇文章主要介紹了Android自定義FloatingActionButton滑動行為只隱藏不出現(xiàn)的問題小結(jié),需要的朋友可以參考下
    2017-01-01
  • 基于Android實現(xiàn)自動滾動布局

    基于Android實現(xiàn)自動滾動布局

    在平時的開發(fā)中,有時會碰到這樣的場景,設(shè)計上布局的內(nèi)容會比較緊湊,導(dǎo)致部分機型上某些布局中的內(nèi)容顯示不完全,或者在數(shù)據(jù)內(nèi)容多的情況下,單行無法顯示所有內(nèi)容,這里給大家簡單介紹下布局自動滾動的一種實現(xiàn)方式,感興趣的朋友可以參考下
    2023-12-12
  • Android實現(xiàn)聯(lián)動下拉框 下拉列表spinner的實例代碼

    Android實現(xiàn)聯(lián)動下拉框 下拉列表spinner的實例代碼

    這篇文章介紹了Android實現(xiàn)聯(lián)動下拉框 下拉列表spinner的實例代碼,有需要的朋友可以參考一下
    2013-10-10

最新評論