自定义Toast工具类

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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/LikeBoke/article/details/75268538