使用CountDownTimer类监听PopupWindow, 实现提示弹窗消息,让用户不用点击过段时间自动消失,优化用户体验。
public class PopupView extends PopupWindow {
private View mPopupView;
private TextView mTextView;
private CountTimer countTimer;
public PopupView(Activity context, String text, int keep_alive) {
super(context);
LayoutInflater.inflater(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mPopupView = inflater.inflate(R.layout.popupwindow_message, null);
mTextView = (TextView)mPopupView.findViewById(R.id.popupwindow_messgae_text);
mTextView.setText(text);
this.setContentView(mPopupView);
this.setWidth(LayoutParams.FILL_PARENT);
this.setHeight(LayoutParams.WRAP_CONTENT);
this.setFocusable(true);
this.setBackgroundDrawable(new ColorDrawable(0xb0000000));
countTimer = new CountTimer(keep_alive*1000 + 1000, 500);
countTimer.start();
mPopupView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int height = mPopupView.findViewById(R.id.popupwindow_messgae_id).getTop();
int y=(int) event.getY();
if(event.getAction()== MotionEvent.ACTION_UP){
if(y<height){
dismiss();
countTimer.cancel();
}
}
return true;
}
});
}
public void setText(String text){
mTextView.setText(text);
}
public void cancelTimer(){
countTimer.cancel();
}
private class CountTimer extends CountDownTimer {
public CountTimer(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
cancel();
}
@Override
public void onTick(long millisUntilFinished) {
if (millisUntilFinished < 1000 && PopupView.this.isShowing()) {
PopupView.this.dismiss();
}
}
}
}