Android继承现有控件拓展实现自定义控件textView

Android继承现有控件拓展实现自定义控件textView,第1张

概述通常情况下,Android实现自定义控件无非三种方式。  Ⅰ、继承现有控件,对其控件的功能进行拓展。

通常情况下,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,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,mWIDth,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三板斧之一――继承现有控件一点总结,希望对大家的学习有所帮助。

总结

以上是内存溢出为你收集整理的Android继承现有控件拓展实现自定义控件textView全部内容,希望文章能够帮你解决Android继承现有控件拓展实现自定义控件textView所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1149418.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存