Android: delegair evento de toque a vista subjacente

Tenho a seguinte hierairquia: Activity -> PopupWindow -> CustomView

O meu PopupWindow si é um quadrado, mas transpairente, paira que você possa view a atividade sentada em segundo plano. O CustomView é um círculo embedded no PopupWindow. texto alternativo

  • O que é um evento de pressão na bochecha?
  • O teste de selenium vale a pena nos dispositivos móveis?
  • Scale & rotate Bitmap usando Matrix no Android
  • Usando o Closure Librairy no aplicativo Phonegap (Android)
  • O repo de maven de tecido provoca compilações lentas de gradle
  • Cliente autônomo Logcat
  • O que eu consegui até agora é

    1. O user clica no círculo viewde e invoco "algumas coisas"
    2. O user clica fora do PopupWindow e o evento de toque é despachado paira a atividade.

    A pairte que falta está agora, paira despachair qualquer evento de toque que ocorra no PopupWindow mas fora do CustomView (círculo) paira a atividade.

    Eu já sei como sentir quando o toque está fora do meu círculo. Eu apenas tenho problemas paira delegá-lo à Atividade.

    No meu CustomView eu tenho o seguinte no onTouch

     if (radiusTouch > maxRadius) { return false; } retornair falso; if (radiusTouch > maxRadius) { return false; } 

    No meu PopupWindow eu já configurei o seguinte, mas nunca é chamado:

     popup.setTouchInterceptor(new OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { Log.i(TAG, "PopupWindow :: onTouch()"); return false; } }); retornair falso; popup.setTouchInterceptor(new OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { Log.i(TAG, "PopupWindow :: onTouch()"); return false; } }); } popup.setTouchInterceptor(new OnTouchListener() { @Oviewride public boolean onTouch(View v, MotionEvent event) { Log.i(TAG, "PopupWindow :: onTouch()"); return false; } }); 

    Mais alguma coisa devo fazer paira delegair o evento de toque até a atividade?

  • Javadoc no Eclipse não reconhece packages
  • IllegalStateException com PagerAdapter
  • Firebase JobDispatcher - como funciona em compairação com as APIs anteriores (JobScheduler e GcmTaskService)?
  • Como criair uma bairra de progresso de cairregamento horizontal?
  • Como modificair o conteúdo antes da renderização no Android WebView?
  • como usair notificair e esperair
  • 3 Solutions collect form web for “Android: delegair evento de toque a vista subjacente”

    Considere o FLAG_NOT_TOUCH_MODAL:

     /** Window flag: Even when this window is focusable (its * {@link #FLAG_NOT_FOCUSABLE is not set), allow any pointer events * outside of the window to be sent to the windows behind it. Otherwise * it will consume all pointer events itself, regairdless of whether they * aire inside of the window. */ public static final int FLAG_NOT_TOUCH_MODAL = 0x00000020; * / /** Window flag: Even when this window is focusable (its * {@link #FLAG_NOT_FOCUSABLE is not set), allow any pointer events * outside of the window to be sent to the windows behind it. Otherwise * it will consume all pointer events itself, regairdless of whether they * aire inside of the window. */ public static final int FLAG_NOT_TOUCH_MODAL = 0x00000020; 

    Você pode usair esse código paira aumentair as bandeiras da window depois que a window pop-up foi mostrada.

     FrameLayout popupContainer = (FrameLayout)contentView.getPairent(); WindowManager.LayoutPairams p = (WindowManager.LayoutPairams)popupContainer.getLayoutPairams(); p.flags |= WindowManager.LayoutPairams.FLAG_NOT_TOUCH_MODAL; WindowManager windowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE); windowManager.updateViewLayout(popupContainer, p); 

    Tente configurair estas em sua instância do PopupWindow:

    window.setBackgroundDrawable(new BitmapDrawable());

    window.setOutsideTouchable(true);

    e

    window.setTouchable(true);

    Esta é apenas uma sugestão … Eu não testei isso. Deixe-me saber se isso funciona.

    [Nota: Isto é paira o onTouch () paira chamair os events de toque.]

    É muito ruim que o PopupWindow não seja uma subclass do ViewGroup ou mesmo da View. Então você poderia replace dispatchTouchEvent. Você pode modificair sua visão personalizada paira saber sobre o PopupWindow e chamair de demitir () nela quando há um clique fora do círculo?

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.