【android UI学习】LinearGradient实现歌词滚动
Shader着色器的讲解,可以参考
【android UI学习】Shader着色器
这里LinearGradient的实际运用
先看运行效果
具体思路就是,
- 用LinearGradient设置一个三个字体长度的白色渲染进度条
- 通过setTranslate(offset, 0),设置渲染条的滚动
- postInvalidateDelayed(30),每隔30毫秒刷新界面
完整代码如下:
public class MyLinearGradientTextView extends AppCompatTextView {private static final String TAG = "MyLinearGradientTextVie";//textview的宽度private int mViewWidth = 0;//画笔private Paint mPaint;//线性渲染的宽度 我们设置为三个字体的宽度private float mGradientWidth;//线性渲染private LinearGradient mLinearGradient;private Matrix mGradientMatrix;//滚动偏移量private int offset;//滚动速度private int speed = 15;public MyLinearGradientTextView(Context context) {super(context);}public MyLinearGradientTextView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);if (mViewWidth == 0) {//得到view的宽度mViewWidth = getWidth();//代表是有文字的if (mViewWidth > 0) {mPaint = getPaint();//textview的文字
// String text = getText().toString();//因为我们需要滚动,所以,最好文字个数需要大于mGradientWidth(3个字体长度)长度,才能看出效果if (getText().length() > 3) {//每一个文字的长度float textSize = getTextSize();//线性渲染的宽度 我们设置为三个字体的宽度mGradientWidth = 3 * textSize;} else {mGradientWidth = mViewWidth;}// 从左边0开始,到mGradientWidth滚动扫描过来mLinearGradient = new LinearGradient(0, 0, mGradientWidth, 0,new int[]{0x33ffffff, 0xffffffff, 0x33ffffff},new float[]{0, 0.2f, 1}, Shader.TileMode.CLAMP); //边缘融合mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);offset += speed;/*** 如果位置已经移动到了整方了那个文字的地就开始往回滚动。* 但是如果小于1 了那么又开始递增,走另外一个逻辑*/if (offset > mViewWidth - mGradientWidth || offset < 1) {speed = -speed;}mGradientMatrix.setTranslate(offset, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);//paint是textview的所以只需要不断色控制画笔的shader 然后利用矩阵控制位移即可postInvalidateDelayed(30);}
}
【android UI学习】LinearGradient实现歌词滚动相关推荐
- android UI学习书籍
著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:扯淡兄 链接:http://www.zhihu.com/question/19579609/answer/21561103 ...
- Android UI学习组件概述
Android的UI组件繁多,如果学习的时候不能自己总结和分类而是学一个记一个不去思考和学习他们内在的联系那真的是只有做Farmer的命了.为了向注定成为Farmer的命运抗争,在学习Android的 ...
- android layout组件,Android UI学习 - Linear Layout, RelativeLayout
1.一些常用的公共属性介绍 1) layout_width -宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px值来设置宽 2) lay ...
- Android UI学习 - Linear Layout, RelativeLayout
1. 一些常用的公共属性介绍 1) layout_width - 宽 fill_parent: 宽度和父元素相同,wrap_content: 宽度随本身的内容所调整,或者指定 px 值来设置宽 2) ...
- android tabhost --android UI 学习
2019独角兽企业重金招聘Python工程师标准>>> 实现TabHost有三种方式:继承自TabActivity,ActivityGroup和自定义的Activity 实现效果图: ...
- Android UI学习 - GridView和ImageView的使用
GridView: A view that shows items in two-dimensional scrolling grid. The items in the grid come from ...
- android开发UI界面布局教学,android UI学习 -- 设置界面的布局(包括style的使用,selector的使用,Checkbox自定义样式,菜单项的样式)...
最终实现效果如下图: 具体来说就是实现了checkbox自定义选中和为选择样式,菜单项根据不同位置设置不同背景. 先上整体布局文件代码: xmlns:tools="http://schema ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- 【UI学习】Android github开源项目,酷炫自定义控件(View)汇总
[UI学习]Android github开源项目,酷炫自定义控件(View)汇总 转载 2016年09月04日 23:23:15 3484 近期整理的比较酷炫并且我们会经常用到的custom vie ...
最新文章
- 多形态MVC式Web架构:完成实时响应
- DateChooser控件发布ASP.NET 2.0新版(我的ASP.NET 2.0控件开发书的第二个阶段项目)[请大家一定注意版本的更新,下载最新版]...
- PyQt4 Python GUI窗体应用程序
- 人与计算机猜数伪代码,《计算机和算法》PPT课件.ppt
- Python生成器的用法,使用生成器灵活的生成斐波那契数列
- vue 用户名重复验证_Vue项目中实现用户登录及token验证
- 如何成为一位数据科学家(图灵访谈)
- 【华为云技术分享】云图说 | ContainerOps推出灰度发布模式,助力企业落地容器DevOps最佳实践
- python38使用_笨方法学Python 习题38:列表的操作
- spring-aspectj的几个aop注解
- java连接sqlserver非默认实例连接字符串设置
- Angularjs-项目搭建
- 5G对于数据中心的影响有哪些
- (2020)Java后端开发----(面试题和笔试题)
- mysql查找jdbc驱动包_查找已安装的JDBC驱动程序
- 浏览器html中加入word,web网页中加载word
- mysql后门_运用Mysql语句生成后门具体办法
- 2022年下半年网络规划设计师考试下午真题
- ubuntu 命令行查看隐藏文件
- cad图纸怎么看懂_cad学习技巧:如何快速看懂图纸