Popupwindow一般默认点击弹窗外区域,窗口即消失,
这与一条语句有关:popupWindow.setBackgroundDrawable(new BitmapDrawable())
将此语句删掉即可取消这个功能
然而要实现多个Popupwindow可分别拖拽,还要在建popupwindow时将Focusable设为false
具体代码见:
private void showpopwindow() {
// TODO Auto-generated method stub
final PopupWindow remindwindow;
View view ;
LayoutInflater mLayoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = mLayoutInflater.inflate(R.layout.remindinfopopwindowup, null);
remindwindow = new PopupWindow(view, 300, 275);
TextView remindtext = (TextView) view
.findViewById(R.id.remindinfotextview);
remindtext.setText(remindinfo.getRemindmessage());
remindwindow.setAnimationStyle(android.R.style.Animation);
remindwindow.setOutsideTouchable(true);
remindwindow.update();
remindwindow.setTouchable(true);
remindwindow.setFocusable(false);
//拖拽功能实现
view.setOnTouchListener((new OnTouchListener() {
int mScreenX = 0;
int mScreenY = 0;
int mX, mY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setFocusable(true);
mX = (int) event.getX();
mY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
int delX = (int) (event.getX() - mX);
int delY = (int) (event.getY() - mY);
mScreenX += delX;
mScreenY += delY;
remindwindow.update(mScreenX, mScreenY, -1, -1);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}));
if (!remindwindow.isShowing()) {
if (v != null) {
remindwindow.showAsDropDown(v, -160, -15);
} else {
remindwindow.showAtLocation(view, Gravity.LEFT, 0, -100);
}
}
CountDownTimer timer = new CountDownTimer(10000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
if (remindwindow.isShowing())
remindwindow.dismiss();
}
};
timer.start();
}
这样在弹出多个此种popupwindow后,就可以分别实现拖拽操作了