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,线性布局渐变)