zoukankan      html  css  js  c++  java
  • Android-滑动解锁高亮文字自定义TextView

    public class HightLightTextView extends TextView {
    
        // 存储view的宽度  
        private int mTextViewWidth = 0;
        // 画笔  
        private Paint mPaint;
        // 线性渲染  
        private LinearGradient mLinearGradient;
        // 存储变换的matrix  
        private Matrix matrix;
        // 移动距离  
        private int mTranslateX = 0;
    
    
        // 构造方法  
        public HightLightTextView(Context context) {
            this(context, null);
        }
    
        public HightLightTextView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public HightLightTextView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        /**
         * view的调用过程:构造方法->onFinishInflate->onSizeChanged->onDraw
         */
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            // 获取view的宽度,初始化画笔等初始属性  
            if (mTextViewWidth == 0) {
                mTextViewWidth = getMeasuredWidth();
                // 如果宽度大于0的话,则初始化  
                if (mTextViewWidth > 0) {
                    // 初始化画笔  
                    mPaint = getPaint();
                    // 线性渲染  
                    mLinearGradient = new LinearGradient(0, getMeasuredHeight(), mTextViewWidth, 0,
                            new int[]{0X55FFFFFF, 0XFFFFFFFF, 0X55FFFFFF},
                            new float[]{0, 0.5f, 1}, Shader.TileMode.CLAMP);
                    mPaint.setShader(mLinearGradient);
                    matrix = new Matrix();
                }
            }
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            if (matrix != null) {
                mTranslateX += mTextViewWidth / 10;
                // 如果移动的距离大于两倍的宽度,则重新开始移动  
                if (mTranslateX > 2 * mTextViewWidth) {
                    mTranslateX = -mTextViewWidth;
                }
                // 平移matrix  
                matrix.setTranslate(mTranslateX, 0);
                // 设置线性变化的matrix  
                mLinearGradient.setLocalMatrix(matrix);
                // 延迟50ms重绘  (重绘时会重新调用onDraw)
                postInvalidateDelayed(50);
            }
        }
    
    }
  • 相关阅读:
    RabbitMQ指南之一:"Hello World!"
    Java8新特性之五:Optional
    Java8新特性之四:接口默认方法和静态方法
    Java8新特性之三:Stream API
    Java8新特性之二:方法引用
    Notepad++编辑器——Verilog代码片段和语法检查
    数电(5):半导体存储电路
    数电(4):组合逻辑电路
    DDR3_新版(1):IP核调取和官方例程仿真
    数电(2):逻辑代数的基本定理
  • 原文地址:https://www.cnblogs.com/819158327fan/p/8554891.html
Copyright © 2011-2022 走看看