Haga clic en Android a través de PopupWindow

He creado una clase que extiende la ventana emergente. su constructor se parece a lo siguiente

super(builder.context.get());

this.setWindowLayoutMode(ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT);
setFocusable(true);
setBackgroundDrawable(new BitmapDrawable());
setTouchInterceptor(onTouchListener);
FrameLayout frameLayout = new FrameLayout(builder.context.get());
LayoutInflater inflater = (LayoutInflater) builder.context.get().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE);
View overlayBase = inflater.inflate(R.layout.tutorial_view_items, null, false);
frameLayout.addView(builder.backgroundView);
frameLayout.addView(overlayBase);
setContentView(frameLayout);

onTouchListener tiene el siguiente aspecto:

private OnTouchListener onTouchListener = new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        Log.d(TAG, "Received");

        if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(radius, 2)) {
            Log.d(TAG, "bubbled through");
            return false;
        }
        return true;
    }
};

para mostrar realmente la ventana emergente, llamoSomePopupWindow.showAtLocation(SomeActivity.getWindow().getDecorView().getRootView(), Gravity.CENTER, 0, 0);

Representado visualmente, aquí está el producto en cuestión

TouchListener responde, pero la entrada no se envía a la actividad subyacente O a la ventana emergente? (el botón no responde, donde, como si fuera a quitar el ontouchlistener, el botón funciona bien).

actualizar configurar el oyente táctil en frameLayout (es decir, la vista de contenido de la ventana emergente en este caso) en lugar de la ventana emergente en sí misma me permite hacer clic en los botones definidos en la ventana emergente. sigo buscando la manera de delegar el evento táctil a la actividad / vista subyacente

SOLUCIÓN

Registre un interceptor táctil para la ventana emergente. Si desea que la actividad lo maneje, suponiendo que tiene una referencia a la actividad, llame alsomeActivity.dispatchTouchEvent(someMotionEventPassedIntoTheTouchIntercepter);, si desea que la ventana emergente maneje el toque incluso, llamesomeView.dispatchTouchEvent(theMotionEventPassedToTouchInterceptor) a la ventana emergentevista de contenido, como se establece en las ventanas emergentessetContentView(someView) método.

Mi método se parecía específicamente al siguiente

private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
    public boolean onTouch(View v, MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(
                radius, 2)) {
            activity.get().dispatchTouchEvent(event);
            return false;
        }
        frameLayout.dispatchTouchEvent(event);
        return true;
    }
};

Respuestas a la pregunta(2)

Su respuesta a la pregunta