@SuppressLint("ClickableViewAccessibility")
private void showViewOnTop() {
WindowManager windowManager = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
if (imageViewIcon == null || viewParams == null) {
viewParams = new WindowManager.LayoutParams();
viewParams.type = WindowManager.LayoutParams.TYPE_PHONE;
viewParams.width = 32;
viewParams.height = 32;
viewParams.gravity = Gravity.START | Gravity.TOP;
//很重要:否则屏幕就会挡住屏幕,无法触摸其它东西了
viewParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
viewParams.format = PixelFormat.RGBA_8888 | PixelFormat.TRANSLUCENT;
imageViewIcon = new ImageView(this);
imageViewIcon.setImageResource(R.drawable.icon_nt);
imageViewIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(tag, "移动图标被点击了,打开窗体");
Intent taskDoingIntent = new Intent(MainService.this, MainActivity.class);
taskDoingIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(taskDoingIntent);
}
});
//处理移动图标事件
imageViewIcon.setOnTouchListener(new View.OnTouchListener() {
private float mStartX, mStartY;
private boolean isClick = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isClick = true;
mStartX = event.getRawX();
mStartY = event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
isClick = false;
viewParams.x += event.getRawX() - mStartX;
viewParams.y += event.getRawY() - mStartY;
windowManager.updateViewLayout(imageViewIcon, viewParams);
mStartX = event.getRawX();
mStartY = event.getRawY();
break;
case MotionEvent.ACTION_UP:
if (isClick) return v.performClick();
break;
}
return true;
}
});
}
windowManager.addView(imageViewIcon, viewParams);
}
关闭图标
private void removeImageView() {
((WindowManager) this.getSystemService(Context.WINDOW_SERVICE)).removeView(imageViewIcon);
}