自定义吐丝类窗体,并实现拖拽功能

      /*** 显示自定义吐丝* @param address*/private void showMyToast(String address) {if(view != null && mWM != null){mWM.removeView(view);mWM = null;view = null;}view = View.inflate(this, R.layout.toast_address, null);//给吐丝设置皮肤int skinSrc = sp.getInt("skinSrc",R.drawable.call_locate_orange);ll_toast_address = view.findViewById(R.id.ll_toast_address);ll_toast_address.setBackgroundResource(skinSrc);//给吐丝设置显示内容TextView tv_toast_address = (TextView) view.findViewById(R.id.tv_toast_address);tv_toast_address.setText(address);ll_toast_address.setOnTouchListener(new ToastDragListener());//给吐丝添加拖拽事件params = new WindowManager.LayoutParams();params.height = WindowManager.LayoutParams.WRAP_CONTENT;params.width = WindowManager.LayoutParams.WRAP_CONTENT;params.format = PixelFormat.TRANSLUCENT;params.gravity = Gravity.LEFT | Gravity.TOP;//这是窗体的原点位置,如果设置为CENTER默认,远点会在屏幕中间params.x = sp.getInt("addressL",150);params.y = sp.getInt("addressT", 220);params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE;//一个优先级非常高的窗体,不能是TYPE_TOAST类型,吐丝默认不能被点击,需要权限SYSTEM_ALERT_WINDOW;params.setTitle("Toast");params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;//focusable不能去,如果去了后面的窗口就都不能操作了mWM = (WindowManager)getSystemService(Context.WINDOW_SERVICE);mWM.addView(view, params);//将View对象添加到窗体上显示}/*** @author Administrator*    吐丝拖拽事件*/private class ToastDragListener implements OnTouchListener{private int startX;private int startY;@Overridepublic boolean onTouch(View v, MotionEvent event) {System.out.println("触发了触摸事件");switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startX = (int) event.getRawX();startY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE:int newX = (int) event.getRawX();int newY = (int) event.getRawY();int x = params.x+newX-startX;int y = params.y+newY-startY;
//                params.x = newX;
//                params.y = newY;if(x < 0 || y <0 || x+v.getWidth()>width || y + v.getHeight() > height){}else{params.x = x;params.y = y;mWM.updateViewLayout(view, params);//布局参数修改后需要通过更新来改变布局}//重新初始化startXstartX = newX;startY = newY;break;case MotionEvent.ACTION_UP:break;default:break;}return true;}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部