android 线性布局渐变,Android 线性颜色渐变

最近遇到一个需要用到线性颜色渐变的需求,而且后期还可能改为颜色“闪动”的效果。

预期效果如下:

920f11714355?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

于是就去研究了一下线性颜色渐变,这里做下总结。

实现线性颜色渐变,有四种方式:

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);

}

}

运行效果如下图:

920f11714355?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

​ 代码很简单,就是在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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值