最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

介紹

在小米的開機(jī)動畫和一些歡迎界面中, 我們經(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)上面第一張圖中小米開機(jī)動畫的效果。

我們通過控制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ù)表示漸變圓中心坐標(biāo) 
        // 第三個參數(shù)表示半徑 
        // 第四個,第五個,第六個與線性渲染相同 
        mRadialGradient = new RadialGradient(50, 50,30, new int[] {
            0x11FEB726, 0xffFEB726, 0x33FEB726 }, new float[] { 0,
            0.5f, 1 }, Shader.TileMode.CLAMP);

        // 創(chuàng)建LinearGradient對象
        // 起始點坐標(biāo)(-mViewWidth, 0) 終點坐標(biāo)(0,0)
        // 第一個,第二個參數(shù)表示漸變起點 可以設(shè)置起點終點在對角等任意位置 
        // 第三個,第四個參數(shù)表示漸變終點 
        // 第五個參數(shù)表示漸變顏色 
        // 第六個參數(shù)可以為空,表示坐標(biāo),值為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系列---JSON數(shù)據(jù)解析的實例

    Android系列---JSON數(shù)據(jù)解析的實例

    JSON(JavaScript Object Notation)和XML,并稱為客戶端和服務(wù)端交互解決方案的倚天劍和屠龍刀,這篇文章主要介紹了Android系列---JSON數(shù)據(jù)解析的實例,有興趣的可以了解一下。
    2016-11-11
  • 詳解Android開發(fā)中Activity的四種launchMode

    詳解Android開發(fā)中Activity的四種launchMode

    這篇文章主要介紹了Android開發(fā)中Activity的四種launchMode,launchMode主要用于控制多個Activity間的跳轉(zhuǎn),需要的朋友可以參考下
    2016-03-03
  • Android 中按home鍵和跳轉(zhuǎn)到主界面的實例代碼

    Android 中按home鍵和跳轉(zhuǎn)到主界面的實例代碼

    本文通過實例代碼給大家分享Android 中按home鍵和跳轉(zhuǎn)到主界面的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-04-04
  • Kotlin集合List Set Map使用介紹詳解

    Kotlin集合List Set Map使用介紹詳解

    集合是可變數(shù)量(可能為0)的一組條目,kotlin標(biāo)準(zhǔn)庫提供一個整套用于集合管理的工具,各種集合對于解決問題都具有重要意義,并且經(jīng)常用到。kotlin中的集合與Java基本類似
    2022-09-09
  • Android編程開發(fā)之打開文件的Intent及使用方法

    Android編程開發(fā)之打開文件的Intent及使用方法

    這篇文章主要介紹了Android編程開發(fā)之打開文件的Intent及使用方法,已實例形式分析了Android打開文件Intent的相關(guān)布局及功能實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • 淺談android Fragment橫豎屏翻轉(zhuǎn)對重新加載的要求

    淺談android Fragment橫豎屏翻轉(zhuǎn)對重新加載的要求

    下面小編就為大家分享一篇淺談android Fragment橫豎屏翻轉(zhuǎn)對重新加載的要求,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Android開發(fā)中Signal背后的bug與解決

    Android開發(fā)中Signal背后的bug與解決

    這篇文章主要為大家介紹了Android開發(fā)中Signal背后的bug與解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • android仿Adapter實現(xiàn)自定義PagerAdapter方法示例

    android仿Adapter實現(xiàn)自定義PagerAdapter方法示例

    這篇文章主要給大家介紹了關(guān)于android仿Adapter實現(xiàn)自定義PagerAdapter的相關(guān)資料,文中詳細(xì)介紹了關(guān)于PagerAdapter的用法,對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Android實戰(zhàn)教程第一篇之最簡單的計算器

    Android實戰(zhàn)教程第一篇之最簡單的計算器

    這篇文章主要為大家詳細(xì)介紹了Android實戰(zhàn)教程第一篇,如何實現(xiàn)最簡單的計算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android模擬用戶點擊的實現(xiàn)方法

    Android模擬用戶點擊的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于Android模擬用戶點擊的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02

最新評論

莱芜市| 长治市| 河东区| 清流县| 香港| 准格尔旗| 吉水县| 南陵县| 三原县| 北票市| 来凤县| 十堰市| 南部县| 吐鲁番市| 济南市| 平利县| 板桥市| 漠河县| 朝阳县| 忻州市| 密山市| 江城| 革吉县| 大姚县| 黄平县| 阳谷县| 大安市| 裕民县| 凭祥市| 五河县| 宝兴县| 东宁县| 普宁市| 临汾市| 长葛市| 阿坝| 安阳市| 云龙县| 金寨县| 温泉县| 荥阳市|