自己写了一个简单的小demo,通过使用LinearGradient和Shader渲染器来自定义带闪光的TextView,效果如下:
下面贴上自定义的TextView代码:
package com.dfhe.textviewself;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* 项目名称:TextViewSelf
* 类描述:
* 创建人:Administrator
* 创建时间:2016/2/23 11:27
* 修改人:Administrator
* 修改时间:2016/2/23 11:27
* 修改备注:
*
* @param
*/
public class TextViewTwo extends TextView {
private int mViewWidth;
private Paint mPaint;
private LinearGradient mLinearGradient;
private Matrix mGradientMatrix;
private int mTranslate;
public TextViewTwo(Context context) {
super(context,null);
}
public TextViewTwo(Context context, AttributeSet attrs) {
super(context, attrs,0);
}
public TextViewTwo(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@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();
// 创建LinearGradient并设置渐变颜色数组
// 第一个,第二个参数表示渐变起点 可以设置起点终点在对角等任意位置
// 第三个,第四个参数表示渐变终点
// 第五个参数表示渐变颜色
// 第六个参数可以为空,表示坐标,值为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,Color.YELLOW,Color.BLUE},null, Shader.TileMode.REPEAT);
mPaint.setShader(mLinearGradient);
mGradientMatrix = new Matrix();
}
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(mGradientMatrix!= null){
//控制线性渲染色彩的移动速度
mTranslate += mViewWidth/30;
if(mTranslate > 2*mViewWidth){
mTranslate = -mViewWidth;
}
mGradientMatrix.setTranslate(mTranslate,0);
mLinearGradient.setLocalMatrix(mGradientMatrix);
//设置延时刷新时间
postInvalidateDelayed(150);
}
}
}
2.布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff">
<com.dfhe.textviewself.TextViewTwo
android:layout_width="match_parent"
android:layout_height="120dp"
android:text="添加闪光移动"
android:textSize="30sp"
android:gravity="center"/>
</RelativeLayout>
源码分享在gitHub上面,共需要的人参考:带闪光效果的TextView