public class CustomToast { private static WindowManager mWM; //参数1:上下文 参数二:自定义控件View
public static void showMyToast (final Context context, final View view) {//创建自定义Toast方法 mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); final WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.height = WindowManager.LayoutParams.WRAP_CONTENT; params.width = WindowManager.LayoutParams.WRAP_CONTENT; params.format = PixelFormat.TRANSLUCENT; params.type = WindowManager.LayoutParams.TYPE_PRIORITY_PHONE; params.x = SPUtils.getInt(context, Constant.X); params.y = SPUtils.getInt(context, Constant.Y); params.gravity = Gravity.LEFT + Gravity.TOP; params.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; view.setOnTouchListener(new View.OnTouchListener() { private float startX; private float startY; private long mLastTime = System.currentTimeMillis(); private long mCurTime = System.currentTimeMillis(); @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://0 按下 startX = event.getRawX();//获取当前x轴坐标 startY = event.getRawY();//获取当前y轴坐标 break; case MotionEvent.ACTION_UP://1 抬起 SPUtils.setInt(context, Constant.X, params.x);//创建一个SP工具类,用作保存 SPUtils.setInt(context, Constant.Y, params.y);// break;
case MotionEvent.ACTION_MOVE://2 移动 float newX = event.getRawX();//获取新的X坐标 float newY = event.getRawY();//获取新的Y坐标 int dx = (int) (newX - startX + 0.5f);//得到每次移动后的差值 int dy = (int) (newY - startY + 0.5f); params.x += dx;//求他们的差 params.y += dy; if (params.x < 0) {//避免自定义控件X轴越界 params.x = 0; } if (params.y < 0) {//避免自定义控件Y轴越界 params.y = 0; } if (params.x > mWM.getDefaultDisplay().getWidth() - view.getWidth()) {//避免其超出屏幕宽度 params.x = mWM.getDefaultDisplay().getWidth() - view.getWidth(); } if (params.y > mWM.getDefaultDisplay().getHeight() - view.getHeight()) {//避免其超出屏幕高度 params.y = mWM.getDefaultDisplay().getHeight() - view.getHeight(); } mWM.updateViewLayout(view, params); startX = event.getRawX();//把当前的坐标置为新的坐标起点 startY = event.getRawY(); break; } return false; } }); mWM.addView(view, params); } public static void removeMyToast(View view){//关闭自定义Toast的方法 if (mWM != null) { mWM.removeView(view); mWM = null; } } }