颜色渐变滚动Textview

public class FlashTextView extends android.support.v7.widget.AppCompatTextView {
    private Paint mPaint;
    private int mViewWidth;
    private LinearGradient mLinearGradient;
    private Matrix mGradientMatrix;
    private int mTransalte;

    public FlashTextView(Context context, @Nullable 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();//获得当前绘制的Paint对象
                mLinearGradient = new LinearGradient(
                        0,//渐变起始点x坐标
                        0,//渐变起始点y坐标
                        mViewWidth,//渐变结束点x点坐标
                        0,//渐变结束点y坐标
                        new int[]{
                                Color.BLUE, 0xffffffff,
                                Color.BLUE,Color.RED,Color.YELLOW},//颜色的int数组
                        null,//相对位置的颜色数组,可为null,  若为null,可为null,颜色沿渐变线均匀分布
                        Shader.TileMode.MIRROR);//平铺模式
                mPaint.setShader(mLinearGradient);//给这个paint设置linearFradient属性
                mGradientMatrix = new Matrix();
            }
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if (mGradientMatrix != null) {
            mTransalte += mViewWidth / 5;
            if (mTransalte > 2 * mViewWidth) {
                mTransalte -= mViewWidth;
            }
            mGradientMatrix.setTranslate(mTransalte, 0);
            mLinearGradient.setLocalMatrix(mGradientMatrix);//通过矩阵的方式不断平移产生渐变效果
            postInvalidateDelayed(100);

        }

    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现`TextView`文字滚动颜色渐变的效果,可以使用`LinearGradient`和`Matrix`来实现。 具体实现步骤如下: 1. 定义一个`LinearGradient`对象,用于存储渐变颜色信息。 ```java int[] colors = {Color.BLACK, Color.WHITE, Color.BLACK}; // 定义渐变颜色 float[] positions = {0f, 0.5f, 1f}; // 定义渐变颜色位置 LinearGradient gradient = new LinearGradient(0, 0, textView.getWidth(), 0, colors, positions, Shader.TileMode.CLAMP); // 创建线性渐变对象 ``` 2. 定义一个`Matrix`对象,用于控制文字的绘制。 ```java Matrix matrix = new Matrix(); matrix.setTranslate(textView.getWidth(), 0); // 设置初始位置 ``` 3. 在`TextView`的`onDraw()`方法中,使用`Paint`对象设置渐变和矩阵,并调用`canvas.drawText()`方法绘制文字。 ```java Paint paint = textView.getPaint(); paint.setShader(gradient); paint.getShader().setLocalMatrix(matrix); canvas.drawText(textView.getText().toString(), 0, textView.getHeight() / 2, paint); ``` 4. 在`TextView`的`onSizeChanged()`方法中,重新设置`LinearGradient`和`Matrix`对象的参数。 ```java @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); int[] colors = {Color.BLACK, Color.WHITE, Color.BLACK}; float[] positions = {0f, 0.5f, 1f}; gradient = new LinearGradient(0, 0, w, 0, colors, positions, Shader.TileMode.CLAMP); matrix = new Matrix(); matrix.setTranslate(w, 0); } ``` 完整代码示例: ```java public class GradientTextView extends androidx.appcompat.widget.AppCompatTextView { private LinearGradient gradient; private Matrix matrix; public GradientTextView(Context context) { super(context); } public GradientTextView(Context context, AttributeSet attrs) { super(context, attrs); } public GradientTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { Paint paint = getPaint(); paint.setShader(gradient); paint.getShader().setLocalMatrix(matrix); canvas.drawText(getText().toString(), 0, getHeight() / 2, paint); invalidate(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { int[] colors = {Color.BLACK, Color.WHITE, Color.BLACK}; float[] positions = {0f, 0.5f, 1f}; gradient = new LinearGradient(0, 0, w, 0, colors, positions, Shader.TileMode.CLAMP); matrix = new Matrix(); matrix.setTranslate(w, 0); } } ``` 使用方法: ```xml <com.example.GradientTextView android:id="@+id/gradient_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/lorem_ipsum" android:textColor="@android:color/black" android:textSize="24sp" /> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值