美文网首页
blink标签在布局中的特殊用处

blink标签在布局中的特殊用处

作者: act262 | 来源:发表于2017-10-11 10:30 被阅读140次

    Android中的xml布局的解析是在LayoutInflater中进行的,
    LayoutInflater.java

    // 这里定义的blink标签
    private static final String TAG_1995 = "blink";
    
    

    LayoutInflater在解析到blink标签时直接返回一个BlinkLayout对象

      private static class BlinkLayout extends FrameLayout {
            private static final int MESSAGE_BLINK = 0x42;
            private static final int BLINK_DELAY = 500;
    
            private boolean mBlink;
            private boolean mBlinkState;
            private final Handler mHandler;
    
            public BlinkLayout(Context context, AttributeSet attrs) {
                super(context, attrs);
                mHandler = new Handler(new Handler.Callback() {
                    @Override
                    public boolean handleMessage(Message msg) {
                        if (msg.what == MESSAGE_BLINK) {
                            if (mBlink) {
                                // 不断的取反,重复操作
                                mBlinkState = !mBlinkState;
                                makeBlink();
                            }
                            invalidate();
                            return true;
                        }
                        return false;
                    }
                });
            }
    
            private void makeBlink() {
                Message message = mHandler.obtainMessage(MESSAGE_BLINK);
                mHandler.sendMessageDelayed(message, BLINK_DELAY);
            }
    
            @Override
            protected void onAttachedToWindow() {
                super.onAttachedToWindow();
    
                mBlink = true;
                mBlinkState = true;
    
                makeBlink();
            }
    
            @Override
            protected void onDetachedFromWindow() {
                super.onDetachedFromWindow();
    
                mBlink = false;
                mBlinkState = true;
    
                mHandler.removeMessages(MESSAGE_BLINK);
            }
    
            @Override
            protected void dispatchDraw(Canvas canvas) {
                if (mBlinkState) {
                    super.dispatchDraw(canvas);
                }
            }
        }
    

    BlinkLayout的作用是每隔500ms绘制刷新一次,也就形成了500ms闪烁的效果,有点类似在EditText中光标不断的闪烁效果。

    相关文章

      网友评论

          本文标题:blink标签在布局中的特殊用处

          本文链接:https://www.haomeiwen.com/subject/qqwiyxtx.html