美文网首页
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标签在布局中的特殊用处

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

  • day3 CSS布局

    1、标准流 1.什么是标准流 标签在没有添加布局相关的样式的时候,在浏览器中默认的布局方式块级标签在标准流中是一个...

  • Day03-CSS布局

    1.什么是标准流标签在没有添加布局相关的样式的时候,在浏览器中默认的布局方式块级标签在标准流中是一个占一行(不管宽...

  • day23总结

    1.什么是标准流标签在没有添加布局相关的样式的时候,在浏览器中默认的布局方式  块级标签在标准流中是一个占一行(不...

  • 2019-01-23day3学习总结

    1.什么是标准流标签在没有添加布局相关的样式的时候,在浏览器中默认的布局方式块级标签在标准流中是一个占一行(不管宽...

  • Day3标准流层模型浮动模型

    一、标准流 1.什么是标准流 ​ 标签在没有添加布局相关的样式的时候,在浏览器中默认的布局方式 ​ 块...

  • 【中级——高级迈不过去?】Android高级工程师进阶学习——A

    一、 标签在布局优化中是使用最多的一个标签了,它就是为了解决重复定义布局的问题。标签就相当于C...

  • Android布局优化之include、merge、ViewSt

    一、 标签在布局优化中是使用最多的一个标签了,它就是为了解决重复定义布局的问题。标签就相当于C...

  • Android性能优化---笔记

    1-布局优化 尽量减少布局的层级删除布局中的无用控件和层级 使用性能较低的ViewGroup、 ,标...

  • Flutter——Row&Column

    1. 简述 Row和Column分别是横向布局和纵向布局,对标Android中的LinearLayout Row和...

网友评论

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

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