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

 更新时间:2017年01月09日 15:53:32   作者:Alex_MaHao  
这篇文章主要为大家详细介绍了Android自定义View之边框文字、闪烁发光文字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

对现有控件进行扩展

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

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

相关文章

  • Android序列化接口Parcelable与Serializable接口对比

    Android序列化接口Parcelable与Serializable接口对比

    我们使用 Intent 传递数据的时候,putExtra() 所支持的数据类型事有限的,当需要传递自定义对象的时候就需要序列化。Serializable更简单但是会把整个对象进行序列化因此效率比Parcelable低一些
    2023-02-02
  • Android中获取设备的各种信息总结

    Android中获取设备的各种信息总结

    相信各位Android的开发者们都知道,现在几乎所有的app都需要获得设备信息,那么下面这篇文章就来详细说说获取设备信息的方法。
    2016-09-09
  • android源码探索之定制android关机界面的方法

    android源码探索之定制android关机界面的方法

    这篇文章主要介绍了android源码探索之定制android关机界面的方法,较为详细的分析了Android关机界面的相关原理与代码实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • android 放大镜ShapeDrawable妙用分享

    android 放大镜ShapeDrawable妙用分享

    android上想实现局部放大的效果,比如画面中加个放大镜的效果,发现ShapeDrawable是一个最好的选择。
    2013-06-06
  • Android音视频开发只硬件解码组件MediaCodec讲解

    Android音视频开发只硬件解码组件MediaCodec讲解

    在Android开发中提供了实现音视频编解码工具MediaCodec,针对对应音视频解码类型通过该类创建对应解码器就能实现对数据进行解码操作。本文通过示例详细讲解了MediaCodec的使用,需要的可以参考一下
    2023-01-01
  • Android7.0行为变更之适配File Provider的方法

    Android7.0行为变更之适配File Provider的方法

    这篇文章主要介绍了Android7.0行为变更之适配File Provider的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Android基于反射技术实现的加减乘除运算示例

    Android基于反射技术实现的加减乘除运算示例

    这篇文章主要介绍了Android基于反射技术实现的加减乘除运算,较为详细的描述了反射技术的原理,并结合完整实例形式分析了Android基于反射技术实现加减乘除四则运算的相关操作步骤与实现技巧,需要的朋友可以参考下
    2016-10-10
  • Android xmlns 的作用及其自定义实例详解

    Android xmlns 的作用及其自定义实例详解

    这篇文章主要介绍了 Android xmlns 的作用及其自定义实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • Android通过overScrollBy实现下拉视差特效

    Android通过overScrollBy实现下拉视差特效

    这篇文章主要为大家详细介绍了Android通过overScrollBy实现下拉视差特效,实现精彩的阻尼效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • Kotlin扩展函数及实现机制的深入探索

    Kotlin扩展函数及实现机制的深入探索

    扩展函数与扩展属性的神奇之处在于,可以在不修改原来类的条件下,使用函数和属性,表现得就像是属于这个类的一样。下面这篇文章主要给大家介绍了关于Kotlin扩展函数及实现机制的相关资料,需要的朋友可以参考下
    2018-06-06

最新评论