当前位置: 代码迷 >> 综合 >> Android自定义TextView闪烁文字的效果
  详细解决方案

Android自定义TextView闪烁文字的效果

热度:85   发布时间:2023-10-26 05:35:59.0

要想实现这个效果,可以充分利用Android中Paint对象的Shader渲染器。通过设置一个不断变化的LinearGradient,并使用带有该属性的Paint对象来绘制显示的文字,首先在onSizeChanged()方法中进行一些对象的初始化工作,并根据View的宽高设置一个LinearGradient渐变渲染器。

其中最关键的就是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个paint对象设置原生TextView没有的LinearGradient属性,最后,在onDraw()方法中,通过矩阵的方式不断平移渐变效果,从而在绘制文字时,产生动态的闪动效果,

自定义TextView整体代码如下:

package com.example.myapplication;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 android.widget.TextView;/*** Created by song on 2016/12/27.*/public class MyTextView extends TextView {private int mViewWidth = 0;private Paint mPaint;private LinearGradient mLinearGradient;private Matrix mGradientMatrix;private int mTranslate;public MyTextView(Context context) {super(context);}public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected 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();mLinearGradient = new LinearGradient(0, 0, mViewWidth, 0, new int[]{Color.BLUE, 0xffffffff, Color.BLUE}, null, Shader.TileMode.CLAMP);mPaint.setShader(mLinearGradient);mGradientMatrix = new Matrix();}}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mGradientMatrix != null) {mTranslate += mViewWidth / 5;if (mTranslate > 2 * mViewWidth) {mTranslate = -mViewWidth;}mGradientMatrix.setTranslate(mTranslate, 0);mLinearGradient.setLocalMatrix(mGradientMatrix);postInvalidateDelayed(100);}}
}


  相关解决方案