如何实现定时消失
在工作遇到的需求,当时是点击签到弹出已签到和签到成功字样,所以选择使用popupWindow加CountDownTimer这个做倒计时的类实现此类功能。下面是实现方式具体代码:
public class MyPop extends PopupWindow { private TextView mTvSign; public MyPop(Context context) { super(context); View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popupwindow_message, null); mTvSign=(TextView) contentView.findViewById(R.id.popupwindow_messgae_text); // 1.设置窗体显示内容 this.setContentView(contentView); // 2.设置窗体大小 this.setWidth(330); this.setHeight(150); this.setFocusable(false); this.setOutsideTouchable(true); this.setTouchable(true); // 3.必选项:兼容2.+ this.setBackgroundDrawable(new BitmapDrawable()); timer.start(); }这里介绍一下CountDownTimer这个类,该类是一个抽象类继承时要实现其两个方法,该类主要是做倒计时多少秒执行相应功能。//这里填持续时间也就是隔多长时间消失
CountDownTimer timer=new CountDownTimer(1000,10) {
@Override
public void onTick(long l) { }
@Override
public void onFinish() {
dismiss();
}
};
public void showText(String text){
mTvSign.setText(text);
}
}
构造方法:CountDownTimer (long millisInFuture, long countDownInterval)
millisInFuture:从开始调用start()到倒计时完成并onFinish()方法被调用的毫秒数。
countDownInterval:接收onTick()回调的间隔时间。
还有四个方法:
(1)start():这个方法做启动倒计时
(2)cancel():取消倒计时
(3)abstract void onFinish():倒计时结束时调用
(4)abstract void onTick(long millisUntilFinished):每个多少秒调用一次。参数millisUntilFinished是在倒计时过程中传入进来的毫秒数,比如倒计时总时间为6秒,时间间隔为一秒,那么这个参数的传进来的值依次为:5、4、3、2、1
如何设置popupWindow的位置
这里有两个方法:myPop.showAsDropDown()和myPop.showAtLocation()
(1)showAsDropDown(veiw,xoff,yoff):这个方法会在控件下方弹出,但是如果没有下方没有剩余控件就像上方弹出,后面的两个参数代表偏移;(2)showAtLocation():这个方法可以在各个位置显示, 比如在控件上方 myPop.showAtLocation(v, Gravity.NO_GRAVITY, location[0],location[1]-popupWindow.getHeight()); , 控件左边 myPop.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-popupWindow.getWidth(),location[1]);还有一个就是在屏幕中央显示
myPop.showAtLocation(mTv, Gravity.CENTER, 0, 0);