[Android]自定义定时消失PopupWindow

使用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();            
             }        
         }    
     }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容