国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android繼承現有控件拓展實現自定義控件textView

2019-12-12 06:30:22
字體:
來源:轉載
供稿:網友

通常情況下,Android實現自定義控件無非三種方式。

  Ⅰ、繼承現有控件,對其控件的功能進行拓展。

  Ⅱ、將現有控件進行組合,實現功能更加強大控件。

  Ⅲ、重寫View實現全新的控件

  本文重點討論繼承現有控件進行拓展實現自定義控件。這是一個非常重要的自定義控件的方法,可以站在原生控件這個巨人肩膀上,拓展自身的功能,一般來說,我們可以在ondraw方法中對原生控件進行繪制。

  本文將以拓展textView為例,看我們是如何繼承現有控件,來自定義一個強大控件。這個自定義控件就是帶有邊框文本框,并且邊框與背景的顏色不一樣。大體效果圖是這樣的:

  我們來分析一下如何實現這樣的效果。我們此時應當盯上OnDraw方法,重寫OnDraw方法,在OnDraw方法中分別畫兩個有帶顏色背景矩形邊框就可以了。這樣,文本框就會有錯落有致的層次感了。

  要有這種錯落有致的效果,我們第一步要做的是定義畫內邊框和外邊框的畫筆,定義的代碼如下:

private void initView() {    mPaint1 = new Paint();    mPaint1.setColor(Color.BLUE);    mPaint1.setStyle(Style.FILL);    mPaint2 = new Paint();    mPaint2.setColor(Color.YELLOW);    mPaint2.setStyle(Style.FILL);  }

  我們定義了第一種畫筆顏色為藍色,畫筆的填充模式為完全填充。第二種畫筆顏色為黃色,同樣填充模式為完全填充。

  有了不同顏色畫筆之后,我們所需要做的是在OnDraw方法運用這兩只畫筆畫不同矩形,這樣代碼又是這樣:

canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint1);    canvas.drawRect(10, 10, getMeasuredWidth() - 10,        getMeasuredHeight() - 10, mPaint2);    canvas.save();    canvas.translate(10, 0);    super.onDraw(canvas);    canvas.restore();

  我們畫了兩個長寬不等的矩形,并且畫布平移了10個單位。這樣畫出來的自定義控件為:

  這個例子,非常簡單,可能大家對繼承原生控件還是意猶未盡的話,我們百尺竿頭更進一步。做個稍微復雜點自定義TextView――帶有閃爍文字的TextView。

  我們分析一下實現的思路:

  ①要實現這個效果,我們可以充分利用paint對象的shader(渲染器)對象。

  ②通過不斷改變linearGradient的位置,來形成這閃爍的效果。

  有了這樣的思路以后,我們首先在onSizeChanged方法初始化LinearGradient對象,和進行圖形變換的矩陣對象。源代碼如下:

if (mWidth == 0) {      mWidth = getMeasuredWidth();      if (mWidth > 0) {        mPaint = getPaint();        mLinearGradient = new LinearGradient(0, 0, mWidth, 0,            new int[] { Color.GRAY, Color.GREEN, Color.GRAY }, null,            Shader.TileMode.CLAMP);        mPaint.setShader(mLinearGradient);        matrix = new Matrix();      }    }

   我們將LinearGradient對象顏色設置為灰綠相間的線性漸變對象,顏色的平鋪模式為平鋪。

  然后在onDraw方法中,不斷變換線性漸變對象的位置,從而就有了文字左右閃爍的效果。源代碼如下:

if (matrix != null) {      mTranslate = mTranslate + mWidth / 5;      if (mTranslate > 2 * mWidth) {        mTranslate = -mWidth;      }      matrix.setTranslate(mTranslate, 0);      mLinearGradient.setLocalMatrix(matrix);      postInvalidateDelayed(100);    }

  最終形成的效果為:

  這就是自定義View三板斧之一――繼承現有控件一點總結,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 从化市| 许昌县| 磐安县| 萨嘎县| 环江| 密山市| 綦江县| 鹿泉市| 平远县| 凌云县| 黑水县| 湄潭县| 通城县| 宁阳县| 建昌县| 黎城县| 扶风县| 霍邱县| 广宁县| 宝坻区| 名山县| 松江区| 咸丰县| 偃师市| 巫溪县| 河北区| 延长县| 德格县| 贵阳市| 磐石市| 马山县| 绿春县| 喀什市| 游戏| 思南县| 莱阳市| 阿坝县| 永靖县| 沙湾县| 东乌| 黄骅市|