一.概述
最近在开发中遇到需要让文字显示多种颜色的需求,通过网上搜索发现,google原来就有提供线性渐变的类LinearGradient,通过给画笔设置LinearGradient就可以完成多种颜色渐变的textview.效果图如下:
二.原理
package com.betterda.gradienttextview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.widget.TextView;
import java.util.List;
/**
* 可以渐变的textview
* Created by lyf on 2017/3/28.
*/
public class GradientTextView extends TextView {
private LinearGradient mLinearGradient;
private Paint mPaint;
private int mViewWidth = 0;//文字的宽度
private int mViewHeight = 0;//文字的高度
private Rect mTextBound = new Rect();
private int[] mColorList;//存放颜色的数组
private boolean isVertrial;//默认是横向
public GradientTextView(Context context) {
this(context, null);
}
public GradientTextView(Context context,
AttributeSet attrs) {
super(context, attrs);
//设置默认的颜色
mColorList = new int[]{0xFFffff40, 0xFFff6027};
}
@Override
protected void onDraw(Canvas canvas) {
if (isVertrial) {
mViewHeight = getMeasuredHeight();
} else {
mViewWidth = getMeasuredWidth();
}
mPaint = getPaint();
String mTipText = getText().toString();
mPaint.getTextBounds(mTipText, 0, mTipText.length(), mTextBound);
//前面4个参数分别表示渐变的开始x轴,开始y轴,结束的x轴,结束的y轴,mcolorList表示渐变的颜色数组
mLinearGradient = new LinearGradient(0, 0, mViewWidth, mViewHeight, mColorList, null, Shader.TileMode.CLAMP);
mPaint.setShader(mLinearGradient);
//画出文字
canvas.drawText(mTipText, getMeasuredWidth() / 2 - mTextBound.width() / 2, getMeasuredHeight() / 2 + mTextBound.height() / 2, mPaint);
}
/**
* true表示纵向渐变,false变身横向渐变
*
* @param vertrial
*/
public void setVertrial(boolean vertrial) {
isVertrial = vertrial;
}
/**
* 设置渐变的颜色
*
* @param mColorList
*/
public void setmColorList(int[] mColorList) {
if (mColorList != null && mColorList.length < 2) {
throw new RuntimeException("mClorList's length must be > 2");
} else {
this.mColorList = mColorList;
}
}
}
三.使用
我将这个传入到jcenter库中,所以使用as的朋友只要引入compile ‘com.betterda.gradenttextview:gradienttextview2:0.0.1’就可以使用了.
使用方法也很简单只要在xml如下使用就可以:
<com.betterda.gradienttextview.GradientTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
在java文件中可以调用setVertrial(boolean)来设置横向渐变还是竖直渐变.通过可以调用setmColorList(int[] mColorList)方法来设置渐变的颜色.github项目地址