Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自定義View之邊框文字、閃爍發光文字

Android自定義View之邊框文字、閃爍發光文字

編輯:關於Android編程

對現有控件進行擴展

1、繪制如下所示的兩層背景的TextView

創建BorderTextView繼承TextView

在構造函數中初始化一些基本數據

 //外邊框
    mPaint1 = new Paint();
    mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_bright));
    //畫筆的樣式,充滿
    mPaint1.setStyle(Paint.Style.FILL);


    //內邊框
    mPaint2 = new Paint();
    mPaint2.setColor(Color.YELLOW);
    mPaint2.setStyle(Paint.Style.FILL);

重寫onDraw()方法,在此方法中主要通過canvas對象,來進行繪畫。

 @Override
  protected void onDraw(Canvas canvas) {

    //繪制外層矩形
    canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1);

    //繪制內層矩形
    canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2);

    canvas.save();//保存之前的狀態

    //水平平移10px
    canvas.translate(10,10);

    //回調父類方法之前,實現自己的邏輯,則會被文本遮蓋
    super.onDraw(canvas);
    //方法之後實現,則內容會覆蓋文本

    canvas.restore();//恢復之前的狀態

  }

如果以上結束之後運行,會發現文字無法完全顯示,是因為,我們平移了文字之後,但文字本身的大小並沒有變化,導致文字顯示不全,我們需要去重載onMeasure()方法,對TextView的寬高重新計算。

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    //因為我們重繪了TextView的上下左右的邊框,所以其寬高應該各增大10*2
    setMeasuredDimension(getMeasuredWidth()+20,getMeasuredHeight()+20);
  }

總結:
1. onMeasure()方法用來決定控件大小,onDraw()方法用來繪制。
2. setMeasuredDimension(width,height)設置控件的寬高

2、閃光的文字

該實現主要通過LinearGradient線性渲染對象來進行顏色的改變。

在onSizeChanged()方法中進行初始化操作。

 @Override
  protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    if(mViewWidth==0){
      mViewWidth = getMeasuredWidth();

      if(mViewWidth>0){
        mPaint = getPaint();
        mLinearGradient = new LinearGradient(0,0,mViewWidth,0,
                new int[]{Color.BLUE,0XFFFFFFFF,Color.BLUE},
                null,
            Shader.TileMode.CLAMP
            );

        mPaint.setShader(mLinearGradient);
        mGradientMatrix = new Matrix();
      }
    }
  }

獲取我們文字的大小,並獲取該文字的Paint對象,同時初始化LinearGradient對象。

創建LinearGradient並設置漸變顏色數組

public LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile); 
// 第一個,第二個參數表示漸變起點 可以設置起點終點在對角等任意位置 
// 第三個,第四個參數表示漸變終點 
// 第五個參數表示漸變顏色 
// 第六個參數可以為空,表示坐標,值為0-1 new float[] {0.25f, 0.5f, 0.75f, 1 } 
// 如果這是空的,顏色均勻分布,沿梯度線。 
// 第七個表示平鋪方式 
// CLAMP重復最後一個顏色至最後 
// MIRROR重復著色的圖像水平或垂直方向已鏡像方式填充會有翻轉效果 
// REPEAT重復著色的圖像水平或垂直方向

初始化Matrix對象。該對象主要用於改變渲染器的值,具體講解請看此博客http://blog.csdn.net/flash129/article/details/8234599

在onDraw()方法中進行改變Matrix對象,並設置給渲染器,同時刷新試圖,形成循環。

  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if(mGradientMatrix!=null){
      mTranslate += mViewWidth/5;

      //當該控件渲染器的顏色變化正好移除屏幕時,從左側進入
      if(mTranslate>2*mViewWidth){
        mTranslate = - mViewWidth;
      }
      mGradientMatrix.setTranslate(mTranslate,0);
      mLinearGradient.setLocalMatrix(mGradientMatrix);

      //100ms 後繼續刷新試圖,即調用onDraw()方法。
      postInvalidateDelayed(100);
    }
  }

總結:
1. 通過LinearGradient來設置圖像的漸變色。
2. Matrix改變漸變色的平移對象
關於自定義View的源碼已上傳到github。如需源碼請移步https://github.com/AlexSmille/CustomView

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved