全网整合营销服务商

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

免费咨询热线: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如何绘制发光效果详解  # 渲染器  # 自己的  # 这是  # 会有  # 是因为  # 第一个  # 渐变色  # 平铺  # 在此  # 上下左右  # 第二个  # 自定义  # 重写  # 镜像  # 以其  # 所示  # 第三个  # 如需  # 不全  # 主要用于 


相关文章: 高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  官网网站制作腾讯审核要多久,联想路由器newifi官网  建站之星如何修改网站生成路径?  建站之星2.7模板快速切换与批量管理功能操作指南  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  ,柠檬视频怎样兑换vip?  建站主机服务器选型指南与性能优化方案解析  如何通过.red域名打造高辨识度品牌网站?  css网站制作参考文献有哪些,易聊怎么注册?  为什么Go需要go mod文件_Go go mod文件作用说明  ui设计制作网站有哪些,手机UI设计网址吗?  高端建站三要素:定制模板、企业官网与响应式设计优化  ,想在网上投简历,哪几个网站比较好?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  如何快速使用云服务器搭建个人网站?  三星网站视频制作教程下载,三星w23网页如何全屏?  教程网站设计制作软件,怎么创建自己的一个网站?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  香港网站服务器数量如何影响SEO优化效果?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  官网建站费用明细查询_企业建站套餐价格及收费标准指南  建站之星会员如何解锁更多建站功能?  如何实现建站之星域名转发设置?  网站制作价目表怎么做,珍爱网婚介费用多少?  建站主机选虚拟主机还是云服务器更好?  如何选择香港主机高效搭建外贸独立站?  广州网站建站公司选择指南:建站流程与SEO优化关键词解析  个人摄影网站制作流程,摄影爱好者都去什么网站?  定制建站哪家更专业可靠?推荐榜单揭晓  宝塔面板如何快速创建新站点?  c++ stringstream用法详解_c++字符串与数字转换利器  专业商城网站制作公司有哪些,pi商城官网是哪个?  网站制作需要会哪些技术,建立一个网站要花费多少?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  如何选择域名并搭建高效网站?  网站制作的步骤包括,正确网址格式怎么写?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  建站之星后台密码遗忘或太弱?如何重置与强化?  如何通过免费商城建站系统源码自定义网站主题与功能?  php json中文编码为null的解决办法  网站制作话术技巧,网站推广做的好怎么话术?  MySQL查询结果复制到新表的方法(更新、插入)  宁波免费建站如何选择可靠模板与平台?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  网页设计与网站制作内容,怎样注册网站?  建站之星如何取消后台验证码生成?  个人网站制作流程图片大全,个人网站如何注销?  建站之星下载版如何获取与安装?  如何通过西部建站助手安装IIS服务器? 

您的项目需求

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