最近作應用的時候遇到一個需求,一行文字的顏色須要一個漸變效果android
如上全部 從左到有逐漸變化,本身寫了一個demo實現上述效果canvas
package com.huwei.example.test; 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; public class MyTextView extends TextView { private LinearGradient mLinearGradient; private Paint mPaint; private int mViewWidth = 0; private Rect mTextBound = new Rect(); public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { mViewWidth = getMeasuredWidth(); mPaint = getPaint(); String mTipText = getText().toString(); mPaint.getTextBounds(mTipText, 0, mTipText.length(), mTextBound); mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[] { 0xFF429321, 0xFFB4EC51 }, null, Shader.TileMode.REPEAT); mPaint.setShader(mLinearGradient); canvas.drawText(mTipText, getMeasuredWidth() / 2 - mTextBound.width() / 2, getMeasuredHeight() / 2 + mTextBound.height()/2, mPaint); } }
核心實現是用了一個LinaerGradient 給paint設置一個LinaerGradient ide
利用這個LinaerGradient 也能夠實現一些其餘相似效果,如如下顏色漸變的線條,顏色漸變的圖片等spa