热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义View之TextView的闪动效果

要实现闪动的效果充分利用Android中Paint对象的Shader渲染器初始化一些使用的全局变量***画笔*pr

要实现闪动的效果充分利用Android 中Paint对象的Shader渲染器

初始化一些使用的全局变量

 /**
* 画笔
*/

private Paint mPaint;
/**
* 获取宽
*/

private int mViewWidth;
/**
* 线性渲染
*/

private LinearGradient mLinearGradient;
/**
* 平移距离
*/

private int mTranslate;
/**
* 矩阵
*/

private Matrix mGradientMtrix;

首先要使用onSizeChanged()这个方法进行一些初始化

/**
* 当组件大小改变时
* @param w
* @param h
* @param oldw
* @param oldh
*/

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mViewhljs-number">0){
mViewhljs-keyword">if (mViewWidth>0){
//关键
mPaint=getPaint();//使用的是getPaint来获取TextView的Paint对象
/**
* 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
第三个,第四个参数表示渐变终点
第五个参数表示渐变颜色
第六个参数可以为空,表示坐标,值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 } 如果这是空的,颜色均匀分 布,沿梯度线。
第七个表示平铺方式:CLAMP重复最后一个颜色至最后 ,MIRROR重复着色的图像水平或垂直方向已镜像方式填充会有翻转效果 , REPEAT重复着色的图像水平或垂直方向
*/

mLinearGradient=new LinearGradient(0,0,mViewWidth,0,new int[]{Color.BLUE,0xffffff,Color.BLUE},null, Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);//设置渲染
//矩阵
mGradientMtrix=new Matrix();
}
}
}

其中最关键的是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个Paint对象设置原生的TextView没有的LinearGradient属性。最后,在onDraw()方法中,通过矩阵的方式来不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mGradientMtrix!=null){
//位置不断递增
mTranslate+=mViewWidth/5;
if (mTranslate > mViewWidth) {
//当平移的距离大于整个内容的宽度是返回最开始的位置 实现不挺的循环
mTranslate=-mViewWidth;
}
//设置平移
mGradientMtrix.setTranslate(mTranslate,0);
mLinearGradient.setLocalMatrix(mGradientMtrix);
postInvalidateDelayed(100);

}
}

推荐阅读
author-avatar
zhaoyunnidaye_260
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有