动态渐变的textView

package com.youjing.yingyudiandu.englishreading.utils;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.util.AttributeSet;

import com.youjing.yingyudiandu.R;


/**
 * 动态渐变 textview
 */
public class DT_TextView extends androidx.appcompat.widget.AppCompatTextView {


    private LinearGradient mLinearGradient;
    private Matrix mGradientMatrix;//渐变矩阵
    private Paint mPaint;//画笔
    private int mViewWidth = 0;//textView的宽
    private int mTranslate = 0;//平移量

    private boolean mAnimating = true;//是否动画
    private int delta = 10;//移动增量

    public DT_TextView(Context ctx) {
        this(ctx, null);
    }

    public DT_TextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        if (mViewWidth == 0) {
            mViewWidth = getMeasuredWidth();
            if (mViewWidth > 0) {
                mPaint = getPaint();
                String text = getText().toString();
                int size;
                if (text.length() > 0) {
                    size = mViewWidth * 2 / text.length();
                } else {
                    size = mViewWidth;
                }

                mLinearGradient = new LinearGradient(-size, 0, 0, 0,
                        new int[]{getResources().getColor(R.color.main_cheng), Color.WHITE},
                        null, Shader.TileMode.MIRROR);
                mPaint.setShader(mLinearGradient);//设置渐变
                mGradientMatrix = new Matrix();
            }
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mAnimating && mGradientMatrix != null) {
            float mTextWidth = getPaint().measureText(getText().toString());//获得文字宽
            mTranslate += delta;//默认向右移动
            if (mTranslate > mTextWidth + 1 || mTranslate < 1) {
//                delta = -delta;//向左移动
                mTranslate = 0;
//                mTranslate += delta;//默认向右移动
            }
            mGradientMatrix.setTranslate(mTranslate, 0);
            mLinearGradient.setLocalMatrix(mGradientMatrix);
            postInvalidateDelayed(40);//刷新
        }
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值