线性布局渐变,Android 线性颜色渐变"/>
android 线性布局渐变,Android 线性颜色渐变
最近遇到一个需要用到线性颜色渐变的需求,而且后期还可能改为颜色“闪动”的效果。
预期效果如下:
于是就去研究了一下线性颜色渐变,这里做下总结。
实现线性颜色渐变,有四种方式:
1.自定义View继承自TextView,获取View 的Paint对象,并给Paint对象设置渐变。
2.用canvas#drawText方法,在onDraw方法中设置渐变并绘制。
3.用StaticLayout实现多行文本颜色渐变。
4.用DynamicLayout实现多行文本颜色渐变。
下面详细说明这四种方式:
1.直接获取Paint对象,并给Paint设置LinearGradient
public class LinearGradientTextView extends TextView {
private LinearGradient mLinearGradient;
private Paint mPaint;
private int mViewWidth = 0;
public LinearGradientTextView1(Context context) {
this(context, null);
}
public LinearGradientTextView1(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public LinearGradientTextView1(Context context, @Nullable 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();
mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0,
new int[]{0xFFFA3DB3, 0xFF3D53FB}, null,
Shader.TileMode.REPEAT);
mPaint = getPaint();
mPaint.setShader(mLinearGradient);
}
}
@Override
protected void onDraw(Canvas canvas) {
setGravity(Gravity.LEFT);
super.onDraw(canvas);
}
}
运行效果如下图:
代码很简单,就是在onSizeChanged获取mPaint,并给mPaint设置线性渐变,然后在onDraw方法里绘制出来。如果你只是想在TextView中显示渐变颜色的文本,这种方式是最简单的。
2.canvas#drawText实现颜色渐变
这种方式更多用于自定义绘图或者进行图片处理时绘制文字。当然也可以用于TextView 绘制渐变文本。下面给出的例子是在ImageView中绘制颜色渐变的文本:
public class GradientImageView extends ImageView {
private LinearGradient mLinearGradient;
private Paint mPaint;
private int mViewWidth = 0;
private String mSrcString;
更多推荐
android 线性布局渐变,Android 线性颜色渐变
发布评论