Android 如何制作精美的透明菜单,如;“共享菜单”;在安卓画廊?

Android 如何制作精美的透明菜单,如;“共享菜单”;在安卓画廊?,android,coding-style,menu,transparent,Android,Coding Style,Menu,Transparent,在我的安卓2.2.2设备上,多媒体资料看起来真的很不错。在我自己的应用程序中,我想做的是按下一个按钮,然后显示一个如下所示的菜单: 这是否使用标准的Android主题/样式?有人知道这样一个菜单的示例代码吗 编辑: 我发现人们可以用一个对话框来模拟这个菜单。为了简化,在本例中,我没有使用ListView,只使用一个用于对话框的TextView条目: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi

在我的安卓2.2.2设备上,多媒体资料看起来真的很不错。在我自己的应用程序中,我想做的是按下一个按钮,然后显示一个如下所示的菜单:

这是否使用标准的Android主题/样式?有人知道这样一个菜单的示例代码吗

编辑: 我发现人们可以用一个对话框来模拟这个菜单。为了简化,在本例中,我没有使用ListView,只使用一个用于对话框的TextView条目:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              >
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
              android:padding="10dp"
              />
</LinearLayout>
这将创建一个靠近图片中菜单的对话框。然而,我仍然有两个问题:

1) 我怎样才能在对话框底部画出这个小三角形,就像上图一样

2)要打开对话框的按钮水平放置在底部按钮条的中间。所以当我按下它时,对话框应该显示在按钮的正上方。 我想做的是:

WMLP.x = middleButton.getLeft() + (middleButton.getWidth() / 2) - dialog.getWindow().getDecorView().getPaddingLeft() - (WMLP.width / 2);
问题是,WMLP.width是-2。我猜原因是版面宽度设置为“wrap_content”(即-2),而实际宽度目前还不知道。 那么,如何确定对话框的宽度,以便将其放置在另一个视图的同心位置

更新:我终于找到了这样一个对话框的好来源:

这正是我想要的,我现在正在我的应用程序中使用它。

关于对话框 3种选择:

  • 关于画三角形(实际上,我认为它是一个圆角被对角线分割的正方形)。我会在对话框的容器后面创建一个大正方形,另一个是这个三角形(使用图像)。这会有一些透明度方面的问题,因为三角形会部分重叠在正方形上。所以这个三角形可能不是透明的

  • 另一个选项是使用自定义视图。我从未尝试过这个方法,但我认为您可以指定一组点并对它们进行笔划,从而创建白色框架。内部可以是一个带有透明度的绘制矩形(简单)。有一些东西可以用你的画师对象(你用来画文本、线条、矩形)画阴影,但我相信这将是使用手动绘制功能实现的最复杂的事情

  • 使用源代码!(换句话说,Android是开放的……看看他们是如何在源代码中做到的)

  • 关于视图的宽度: 您何时尝试获取该值?如果使用onCreate方法,它应该不会工作。当用户单击按钮时执行此操作。如果你这次已经这么做了,我帮不了你。它应该会起作用。我以前做过很多次


    免费提示:使用view.getLocationOnScreen代替view.getLeft(返回到其父对象的距离),这是一个更好的选择。

    这可能是,或者至少可以通过使用构造来实现。与之相结合,您可以构建自己的“对话框”控件。使用相同的路径,可以定义图形的剪裁区域。最后,您可以使用透明颜色填充画布。

    您可以通过在当前位置添加弹出窗口来完成此操作,要绘制此酷菜单,您还需要绘制此背景的图像和小箭头

    此外,您还应该阅读有关九条路径的绘图,以完成此任务


    PS:我已经完成了,但是有另一张图片。

    和@vikas的可能重复,因为这是你发现的第一个问题的不同问题。这将是第二个问题的重复,但目前为止还没有一个好的答案。但是你能把箭头的尖端放在你想要的特定点上吗?注意,在截图中,箭头不在正方形的中间!是的,锚组件的位置。您需要进行两次绘制,首先绘制矩形,然后绘制指定位置的箭头。
    WMLP.x = middleButton.getLeft() + (middleButton.getWidth() / 2) - dialog.getWindow().getDecorView().getPaddingLeft() - (WMLP.width / 2);