1. 程式人生 > >顏色漸變的Textview

顏色漸變的Textview

一.概述
最近在開發中遇到需要讓文字顯示多種顏色的需求,通過網上搜索發現,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專案地址