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.support.annotation.Nullable; import android.support.v4.content.ContextCompat; import android.support.v7.widget.AppCompatTextView; import android.util.AttributeSet; /** * Created by YRC on 2017/4/18. */ public class MyTextView extends AppCompatTextView { private int mViewWidth; private Paint mPaint1=new Paint(),mPaint2=new Paint(); private Matrix mGradientMatrix; private int mTranslate=0; private LinearGradient mLinearGradient; public MyTextView(Context context) { super(context); } public MyTextView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { mPaint1.setColor(ContextCompat.getColor(getContext(),R.color.holo_blue_light)); mPaint1.setStyle(Paint.Style.FILL); mPaint2.setColor(Color.YELLOW); mPaint2.setStyle(Paint.Style.FILL); //绘制外层矩形 canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint1); //绘制内层矩形 canvas.drawRect(10,10,getMeasuredWidth()-10,getMeasuredHeight()-10,mPaint2); canvas.save(); //绘制文字前平移10像素 canvas.translate(10,0); super.onDraw(canvas); //用于从上次保存调用后删除对矩阵/剪辑状态的所有修改 canvas.restore(); if (mGradientMatrix!=null){ mTranslate+= mViewWidth / 5; if (mTranslate>2*mViewWidth){ mTranslate=-mViewWidth; } mGradientMatrix.setTranslate(mTranslate,0); mLinearGradient.setLocalMatrix(mGradientMatrix); postInvalidateDelayed(100); } } @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){ Paint 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(); } } } }
个人练习代码库/自制TextView
最新推荐文章于 2024-03-30 09:47:51 发布