parpadeo de bricolaje efectos de texto TextView

1. Escribir una clase que hereda Ver
2. método de reemplazo onDraw y el método onSizeChanged
3. código es el siguiente:

    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);
    }

El punto clave es usar el método getPaint () para obtener objetivo Paint consumo de corriente de TextView, y a las propiedades linearGradient de ajuste objeto de la pintura, en el método onDraw, por una forma de matriz para traducir continuamente gradiente, con el fin de dibujar el texto es producir efecto dinámico . . Algunos de los cuales no suelen utilizar la clase, primero y diez, escribir un programa con este tipo de cosas más que unas pocas veces en lo familiar.
Luego directamente por escrito en el interior xml cuando está en uso en la línea:

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

terminado…

Publicado 17 artículos originales · ganado elogios 12 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_24295537/article/details/50908733
Recomendado
Clasificación