对现有控件进行扩展

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小时内与您取得联系。