目的实现一个定时隐藏功能,如果用户三秒内没有点击重置计时按钮,则三秒后隐藏显示的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);
}
}
}