点击事件是一系列动作的组合;
private View view; private WindowManager wm;
//自定义toast土司
private void toast(String address) {
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
//用代码创建的view
// view = new TextView(getApplicationContext());
// view.setText(address);
// view.setTextSize(22);
// view.setTextColor(Color.RED);
//用xml创建的view
final View view = View.inflate(this, R.layout.addressshowbackground, null);
TextView tv = view.findViewById(R.id.tv_addressback);
//设置触摸事件监听
view.setOnTouchListener(new View.OnTouchListener() {
private int startY;
private int startX;
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();//获取当前事件的类型
switch (action) {
case MotionEvent.ACTION_DOWN://按下
//获取开始位置
startX = (int) event.getX();
startY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE://移动
//获取结束的位置
int endX = (int) event.getX();
int endY = (int) event.getY();
//手指的偏移量
int dx = endX - startX;
int dy = endY - startY;
params.x+=dx;
params.y+=dy;
// 考到边界问题
if(params.x<0){
params.x=0;
}else if(params.y<0){
params.y=0;
}else if(params.x>(wm.getDefaultDisplay().getWidth()-view.getWidth())){
params.x=wm.getDefaultDisplay().getWidth()-view.getWidth();
}else if(params.y>(wm.getDefaultDisplay().getHeight()-view.getHeight()){
params.y=wm.getDefaultDisplay().getHeight()-view.getHeight();
}
wm.updateViewLayout(view,params);//更新布局
//再次显示到imagev上,
//更新一下开始的坐标
startX = endX;
startY = endY;
break;
case MotionEvent.ACTION_UP://抬起
//保存endX和endY
break;
case MotionEvent.ACTION_CANCEL://取消
break;
}
return true;//监听器处理完事件了,不要让父控件或父布局相应事件
}
});
view.setBackgroundResource(R.drawable.ic_launcher_background);//设置背景
tv.setText(address);
//设置窗体的参数
params = new WindowManager.LayoutParams();
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity= Gravity.TOP+Gravity.LEFT;//土司的位置在左上
params.x=100;
params.y=100;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
params.format = PixelFormat.TRANSLUCENT;
// params.type = WindowManager.LayoutParams.TYPE_TOAST;
params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;//具有电话优先级的窗体,如果要能获的手势使劲按,就要用这个,还要添加系统的权限
wm.addView(view, params);
}
wm.removeView(view);//移除窗体上的view