Android自定义View之边框文字、闪烁发光文字

Android自定义View之边框文字、闪烁发光文字,第1张

概述对现有控件进行扩展1、绘制如下所示的两层背景的TextView创建BorderTextView继承TextView

对现有控件进行扩展

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,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,mVIEwWIDth,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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android自定义View之边框文字、闪烁发光文字全部内容,希望文章能够帮你解决Android自定义View之边框文字、闪烁发光文字所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1147280.html

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

发表评论

登录后才能评论

评论列表(0条)

保存