自定义TextView:打造渐变文本控件
程序员文章站
2022-06-01 11:34:29
...
相信大家都见过QQ空间黄钻专属的渐变文字展示,那么这种效果是怎么实现的呢?其实很简单,只需一小段代码就能实现文字渐变的效果。
Demo效果如图
该效果是利用LinearGradient和Matrix来实现的
实现代码:
public class GradientTextView extends android.support.v7.widget.AppCompatTextView {
private int mViewWidth;
private LinearGradient mLinearGradient;
private Paint mPaint;
private Matrix mGradientMatrix;
private int mTranslate;
public GradientTextView(Context context) {
super(context);
}
public GradientTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public GradientTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 在onDraw方法中,通过矩阵的方法来不断平移渐变效果,使绘制文字时产生动态的闪动效果
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (mLinearGradient != null) {
mTranslate += mViewWidth / 5;
if (mTranslate > 2 * mViewWidth) {
mTranslate = -mViewWidth;
}
//设置单位矩阵
mGradientMatrix.setTranslate(mTranslate, 0);
//为着色器设置矩阵
mLinearGradient.setLocalMatrix(mGradientMatrix);
//循环等待时间
postInvalidateDelayed(100);
}
}
/**
* 先在onSizeChanged()方法中进行一些初始化工作,根据View的宽来设置一个LinearGradient渐变渲染器
*/
@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) {
//获取当前绘制TextView的Paint对象
mPaint = getPaint();
//自定义渐变渲染器
mLinearGradient = new LinearGradient(
0, 0, mViewWidth, 0,
new int[]{Color.BLUE, 0xffffffff, Color.BLUE},//定义渐变颜色
null, Shader.TileMode.CLAMP);//Shader渲染器
//为画笔设置渐变渲染器
mPaint.setShader(mLinearGradient);
//创建一个单位矩阵
mGradientMatrix = new Matrix();
}
}
}
}
推荐阅读
-
Android控件View打造完美的自定义侧滑菜单
-
Android控件View打造完美的自定义侧滑菜单
-
Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
-
TextView显示文本控件两种方法 TextView显示link的方法
-
Android开发技巧之在a标签或TextView控件中单击链接弹出Activity(自定义动作)
-
Android 自定义TextView实现文本内容自动调整字体大小
-
TextView显示文本控件两种方法 TextView显示link的方法
-
(三十一)c#Winform自定义控件-文本框(四)
-
(二十八)c#Winform自定义控件-文本框(一)
-
(三十)c#Winform自定义控件-文本框(三)