DIY文字闪动效果的TextView

1.写一个类,继承View
2.重写onDraw方法和onSizeChanged方法
3.代码如下:

    private Paint paint1;
    private Paint mPaint;

    private int mViewWidth;
    private LinearGradient mlinearGradient;

    private int mTranslate;//水平方向上平移的距离
    private Matrix gradientMatrix;

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

        if (gradientMatrix != null) {
            mTranslate += mViewWidth / 5;
            //每次刷新view平移一点,如果到头就重新返回在开始平移
            if (mTranslate >2*mViewWidth){
                mTranslate = -mViewWidth;
            }

            gradientMatrix.setTranslate(mTranslate,0);
            mlinearGradient.setLocalMatrix(gradientMatrix);
            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){
                mPaint = getPaint();
                mlinearGradient = new LinearGradient(0
                        , 0
                        , mViewWidth
                        , 0
                        , new int[]{Color.BLUE,0xffffffff,Color.BLUE}
                        , null
                        , Shader.TileMode.CLAMP);
            }

            mPaint.setShader(mlinearGradient);
            gradientMatrix = new Matrix();
        }
    }

    public void initPaint(){
        paint1 = new Paint();
        paint1.setColor(Color.BLUE);
        paint1.setStyle(Paint.Style.FILL);
    }

其中关键的一点是使用getPaint()方法获取当前绘制TextView的Paint对象,并给这个paint对象设置LinearGradient属性,在onDraw方法中,通过矩阵的方式来不断平移渐变效果,从而绘制文字是,产生动态效果。。这其中的一些类笔者也不经常用,先记下来,写程序这种东西多用几次就熟悉了。
然后在用的时候直接写进xml里边就行:

<com.demo.alldemos.diyviews.MyTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

over…

发布了17 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_24295537/article/details/50908733