2015-06-01 7 views
0

Я внедрил радиальную библиотеку меню отсюда: https://code.google.com/p/radial-menu-widget/downloads/list.Android Radial Меню Clipping

Я использую меню внутри FrameLayout, где я показываю WebView с картой. Если я нажму на маркер, появится всплывающее меню. Моя проблема заключается в том, что не весь дисплей реагирует правильно, чтобы меню всплыло.

Изображение: http://sceada.bplaced.net/1.png

На правой стороне красная линия обозначает границу чего-то, у меня действительно не знаю, что это может быть. Если я выхожу за пределы красной линии, меню не открывается. Если я переключусь на пейзаж, становится все хуже. Изображение: http: // sceada.bplaced.net/2.png

Все виды, которые я мог достичь, имеют нормальные значения (как и ожидалось) для ширины и высоты. Так что же это за элемент?

06-01 18:27:37.295: D/JsInterface(8640): popup.getWidth(): 1196 

06-01 18:27:37.295: D/JsInterface(8640): popup.getHeight(): 638 

06-01 18:27:37.295: D/JsInterface(8640): popup.getTag(): null 

06-01 18:27:37.299: D/JsInterface(8640): Landscape 

06-01 18:27:37.299: D/JsInterface(8640): statusBarOffset: 130 

06-01 18:27:37.299: D/JsInterface(8640): xPosition: 598 

06-01 18:27:37.299: D/JsInterface(8640): yPosition: 319 

06-01 18:27:37.299: D/JsInterface(8640): xSource: 609 

06-01 18:27:37.299: D/JsInterface(8640): ySource: 272 

06-01 18:27:37.299: D/JsInterface(8640): dm.heightPixels: 768 

06-01 18:27:37.299: D/JsInterface(8640): dm.widthPixels: 1196 

06-01 18:27:37.299: D/JsInterface(8640): webViewHolder.getMeasuredHeight(): 638 

06-01 18:27:37.299: D/JsInterface(8640): webViewHolder.getMeasuredWidth(): 1196 

06-01 18:27:37.299: D/JsInterface(8640): pieMenu.getHeight(): 638 

06-01 18:27:37.299: D/JsInterface(8640): pieMenu.getWidth(): 1196 

06-01 18:27:37.299: D/JsInterface(8640): mWebView.getHeight(): 638 

06-01 18:27:37.299: D/JsInterface(8640): mWebView.getWidth(): 1196 

06-01 18:27:37.304: D/JsInterface(8640): item.getWidth(): 1196 

06-01 18:27:37.304: D/JsInterface(8640): item.getHeight(): 638 

06-01 18:27:37.304: D/JsInterface(8640): item.getTag(): null 

Некоторый код, как создать меню пирога:

private void createPieMenu() { 
    mMenuItems.clear(); 
    pieMenu = new RadialMenuWidget(this); 

    menuEditItem = new RadialMenuItem("edit","Edit"); 
    menuAttributeItem = new RadialMenuItem("attribute","Attribute"); 
    menuCloseItem = new RadialMenuItem("close", null); 

    menuCloseItem.setDisplayIcon(android.R.drawable.ic_menu_close_clear_cancel); 
    menuCloseItem.setOnMenuItemPressed(new RadialMenuItem.RadialMenuItemClickListener() { 
     @Override 
     public void execute() { 
      pieMenu.dismiss(); 
     } 
    }); 

    mMenuItems.add(menuEditItem); 
    mMenuItems.add(menuAttributeItem); 

    pieMenu.setCenterCircle(menuCloseItem); 

    pieMenu.setAnimationSpeed(1000L); 

    //pieMenu.setSourceLocation(200, 200); 
    //pieMenu.setShowSourceLocation(true); 
    pieMenu.setIconSize(15, 30); 
    pieMenu.setTextSize(13); 
    pieMenu.setOutlineColor(Color.BLACK, 225); 
    pieMenu.setInnerRingColor(0x72B7E8, 180); 

    pieMenu.addMenuEntry(mMenuItems); 


    mJsInterface.setPieMenu(pieMenu); 
} 

public void showRadialMenu(){ 
    mContext.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      webViewHolder.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
      pieMenu.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 
      pieMenu.layout(0, 0, (int)webViewHolder.getMeasuredWidth(), (int)webViewHolder.getMeasuredHeight()); 
      pieMenu.invalidate(); 
      View popup = (View) pieMenu.getRootView(); 

      if(popup != null){ 
       if(Konstanten.D){ 
        Log.d("JsInterface", "popup.getWidth(): " + popup.getWidth()); 
        Log.d("JsInterface", "popup.getHeight(): " + popup.getHeight()); 
        Log.d("JsInterface", "popup.getTag(): " + popup.getTag()); 
       } 
      } 
      pieMenu.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
      pieMenu.setAnimation(onOpenAnimation((int)webViewHolder.getMeasuredHeight()/2, (int)webViewHolder.getMeasuredWidth()/2, x, y)); 
      pieMenu.show(webViewHolder, 0, 0); 

      int count = webViewHolder.getChildCount(); 
      for(int i = 0; i < count; i++){ 
       View item = (View) webViewHolder.getChildAt(i); 

       if(item != null){ 
        if(Konstanten.D){ 
         Log.d("JsInterface", "item.getWidth(): " + item.getWidth()); 
         Log.d("JsInterface", "item.getHeight(): " + item.getHeight()); 
         Log.d("JsInterface", "item.getTag(): " + item.getTag()); 
        } 
       } 
      } 
     } 
    }); 
} 

ответ

0

Ok, я думаю, что я нашел обходной путь. Я реализовал свой собственный PopupWindow и назначил ему меню пирога.

window = new PopupWindow(mContext); 
      window.setWidth((int)webViewHolder.getMeasuredWidth()); 
      window.setHeight(webViewHolder.getMeasuredHeight()+statusBarOffset); 
      window.setTouchable(true); 
      window.setFocusable(true); 
      window.setOutsideTouchable(true); 
      window.setBackgroundDrawable(new BitmapDrawable()); 
      window.setContentView(pieMenu); 
      window.showAtLocation(webViewHolder, 0, 0, 0); 

Потребовалось 5 часов, чтобы решить эту проблему. К сожалению, невозможно изменить PopUpWindow из библиотеки.