目的實現一個定時隱藏功能,如果用戶三秒內沒有點擊重置計時按鈕,則三秒後隱藏顯示的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);
}
}
}