Guía para Android PopupWindos

  
           Hoy recibí una solicitud especial en la empresa. La solicitud es bastante simple y guía al usuario a hacer clic en un botón determinado.

El dibujo de diseño es el siguiente:


1. Ideas para resolver problemas

         1. Use PopupWindow. Debido a que PopupWindow se puede especificar para que se muestre en relación con una vista, podemos usar este método para implementar.

 2. Demanda.

        1. Cuando se hace clic en PopupWindow, PopupWindow debe desaparecer.

        2. Cuando se hace clic en el botón señalado por PopupWindow, se debe activar el evento del botón actual, pero hacer clic en otros botones (excepto el botón en PopupWindows) no puede activar el evento del botón.


3. Problemas que necesitan ser resueltos.

         Primero: necesitamos configurar un objeto OnTouchListener para PopupWindow. El objeto de evento en onTouch (View v, evento MotionEvent) de este objeto se usa para obtener la posición en la que hace clic en la pantalla.

         Segundo: necesitamos escuchar el evento Dismiss de PopupWindow Necesitamos obtener la posición del botón en la pantalla en el método onDismiss de PopupWindow.OnDismissListener .          

核心代码如下:     


 
 
 popupWindow.setTouchInterceptor(new OnTouchListener()
        {
            @Override
            public boolean onTouch(View v, MotionEvent event)
            {
                if(event.getAction() == MotionEvent.ACTION_DOWN) mEvent = event;
                return true;
            }
        });

        popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss()
            {
                int[] local = new int[2];
                mButton.getLocationOnScreen(local);
                if(mEvent.getRawX() < local[0]  || mEvent.getX() > (local[0] + mButton.getWidth()) || mEvent.getRawY() < local[1] ||  mEvent.getRawY()> ( local[1] + mButton.getHeight()))
                {
                    return;
                }
                mButton.callOnClick();
            }
        });


Guess you like

Origin blog.csdn.net/shaohuazuo/article/details/50382386