Android實現定時隱藏View(一段時間無操作後隱藏)

目的實現一個定時隱藏功能,如果用戶三秒內沒有點擊重置計時按鈕,則三秒後隱藏顯示的View,如果用戶點擊開始按鈕,則圖片顯示,開啓計時。

功能界面如下:
這裏寫圖片描述

public class HideViewActivity extends AppCompatActivity {

    private HideControl hideControl;
    private View obj_view;//要定時隱藏的View

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_touch);
        hideControl = new HideControl();
        findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                hideControl.startHideTimer();
            }
        });
        findViewById(R.id.reset).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                hideControl.resetHideTimer();
            }
        });
        obj_view = findViewById(R.id.obj_view);
    }

    public class HideControl {
        public final static int MSG_HIDE = 0x01;

        private HideHandler mHideHandler;

        public HideControl() {
            mHideHandler = new HideHandler();
        }

        public class HideHandler extends Handler {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case MSG_HIDE:
                        obj_view.setVisibility(View.INVISIBLE);
                        break;
                }

            }
        }

        private Runnable hideRunable = new Runnable() {

            @Override
            public void run() {
                mHideHandler.obtainMessage(MSG_HIDE).sendToTarget();
            }
        };

        public void startHideTimer() {//開始計時,三秒後執行runable
            mHideHandler.removeCallbacks(hideRunable);
            if(obj_view.getVisibility() == View.INVISIBLE){
                obj_view.setVisibility(View.VISIBLE);
            }
            mHideHandler.postDelayed(hideRunable, 3000);
        }

        public void endHideTimer() {//移除runable,將不再計時
            mHideHandler.removeCallbacks(hideRunable);
        }

        public void resetHideTimer() {//重置計時
            mHideHandler.removeCallbacks(hideRunable);
            mHideHandler.postDelayed(hideRunable, 3000);
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章