Как переместить оконный менеджер - PullRequest
0 голосов
/ 11 сентября 2018

Код

public class FloatingWindow extends Service {
    WindowManager wm;
    LinearLayout ll;
    LayoutInflater li;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        View myview;
        li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                750, 1000, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,// | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.CENTER | Gravity.CENTER;
        myview = li.inflate(R.layout.service_floating_window, null); // your layout here

        wm.addView(myview, params);
        params.x = 0;
        params.y = 0;

        ImageButton close = (ImageButton) myview.findViewById(R.id.close);

        ll = new LinearLayout(this);
        final WindowManager.LayoutParams finalParameters = params;


        ll.setOnTouchListener(new View.OnTouchListener() {
            WindowManager.LayoutParams updatedParameters = finalParameters;
            double x;
            double y;
            double pressedX;
            double pressedY;

            @Override
            public boolean onTouch(View v, MotionEvent event) {

                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:

                        x = updatedParameters.x;
                        y = updatedParameters.y;

                        pressedX = event.getRawX();
                        pressedY = event.getRawY();

                        break;

                    case MotionEvent.ACTION_MOVE:
                        updatedParameters.x = (int) (x + (event.getRawX() - pressedX));
                        updatedParameters.y = (int) (y + (event.getRawY() - pressedY));

                        wm.updateViewLayout(ll, updatedParameters);

                    default:
                        break;
                }

                return false;
            }
        });

        close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wm.removeView(ll);
                stopSelf();
                System.exit(0);
            }
        });


    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        stopSelf();
    }

}

По какой-то причине я не могу получить доступ к представлениям внутри плавающего окна, а также не могу переместить плавающее окно ... раньше, чем я смог сделать это, когдая создал свое собственное окно, но потом подумал над тем, чтобы накачать представление, и теперь я не могу это сделать ... я не уверен насчет этого кода, так что кто-нибудь может мне помочь, пожалуйста ...

...