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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,935评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,705评论 0 17
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,190评论 4 61
  • 转载本文需注明出处:微信公众号EAWorld,违者必究。 本文目录: 一、写在前面 二、AIDevOps,未来已来...
    72a1f772fe47阅读 1,566评论 0 1
  • yanhsJ阅读 1,014评论 0 1