全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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边框文字  # Android闪烁发光文字  # Android闪烁文字  # Android自定义控件打造闪闪发光字体  # Android实现LED发光字效果  # Android如何绘制发光效果详解  # 渲染器  # 自己的  # 这是  # 会有  # 是因为  # 第一个  # 渐变色  # 平铺  # 在此  # 上下左右  # 第二个  # 自定义  # 重写  # 镜像  # 以其  # 所示  # 第三个  # 如需  # 不全  # 主要用于 


相关文章: 如何打造高效商业网站?建站目的决定转化率  如何在宝塔面板中修改默认建站目录?  怀化网站制作公司,怀化新生儿上户网上办理流程?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  如何在阿里云虚拟主机上快速搭建个人网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  香港服务器租用每月最低只需15元?  如何通过VPS建站无需域名直接访问?  建站之星与建站宝盒如何选择最佳方案?  建站主机类型有哪些?如何正确选型  建站之星安装路径如何正确选择及配置?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  制作旅游网站html,怎样注册旅游网站?  建站之星如何快速解决建站难题?  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  创业网站制作流程,创业网站可靠吗?  如何在IIS管理器中快速创建并配置网站?  购物网站制作公司有哪些,哪个购物网站比较好?  建站之星如何助力网站排名飙升?揭秘高效技巧  如何用西部建站助手快速创建专业网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  黑客入侵网站服务器的常见手法有哪些?  无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  制作网站的软件免费下载,免费制作app哪个平台好?  家庭建站与云服务器建站,如何选择更优?  再谈Python中的字符串与字符编码(推荐)  网站制作公司排行榜,抖音怎样做个人官方网站  建站主机是否等同于虚拟主机?  魔方云NAT建站如何实现端口转发?  红河网站制作公司,红河事业单位身份证如何上传?  如何高效完成自助建站业务培训?  浅谈Javascript中的Label语句  如何通过WDCP绑定主域名及创建子域名站点?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  如何快速查询网址的建站时间与历史轨迹?  如何快速生成凡客建站的专业级图册?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  黑客如何通过漏洞一步步攻陷网站服务器?  建站主机如何选?性能与价格怎样平衡?  建站之星后台管理如何实现高效配置?  如何在Windows服务器上快速搭建网站?  已有域名和空间如何快速搭建网站?  建站之星安装提示数据库无法连接如何解决?  高防服务器:AI智能防御DDoS攻击与数据安全保障  制作证书网站有哪些,全国城建培训中心证书查询官网?  如何挑选最适合建站的高性能VPS主机?  如何获取免费开源的自助建站系统源码?  建站主机解析:虚拟主机配置与服务器选择指南  网站制作知乎推荐,想做自己的网站用什么工具比较好? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。