1

我正在尝试构建一个将在媒体播放器上运行的帮助屏幕。这个想法是在当前视图的顶部放置一个具有透明主题的片段。(有关基本思想,请参阅如何创建类似于您在一些 Android 应用程序和 ICS 中看到的帮助叠加层?)。现在,我了解了上述链接中的步骤,但是如何将每个旁边的圆圈、箭头和段落(解释每个是什么)连接到较低的对象?例如,我有一个对象:

R.id.music_button

我希望有指向音乐按钮的箭头。尝试支持与我们一样多的设备将非常困难,仅绘制几张图片作为顶部布局的一部分并期望它们排成一行。同样,如何在顶层以下的片段上引用对象?

谢谢

更新 1: 根据 Nobu Games 的建议,我保存了该位置并将其传递给帮助片段。

                View helpedButton = getView().findViewById(R.id.my_sources_button);
            int[] location = { 0, 0 };
            helpedButton.getLocationOnScreen(location);

我认为这是对的,但现在我无法绘制箭头:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_help_main_menu, container, false);
    DebugLog.d(TAG, "View v is: " + v);
    RelativeLayout mainHelp = (RelativeLayout) v.findViewById(R.id.mainHelpLayout);
    DebugLog.d(TAG, "Layout is: " + mainHelp);
    ImageView arrow = new ImageView(getActivity());
    arrow.setX(location[0]);
    arrow.setY(location[1]);
    arrow.setImageResource(R.drawable.arrow1);
    arrow.setVisibility(arrow.VISIBLE);
    DebugLog.d(TAG, "Location x: " + location[0]);
    DebugLog.d(TAG, "Location y: " + location[1]);
    arrow.bringToFront();
    DebugLog.d(TAG, "CIRCLE " + arrow);
    mainHelp.addView(arrow);
    return v;
}

更新 2 使用 getLocationOnScreen 和 getLocationInWindow 给了我奇怪的结果。我试图绘制箭头的按钮也位于屏幕的右下方,下方和右侧都有一些填充。我得到的坐标是索尼 GTV 上的 x=1319 和 716。如果我使用

        LayoutParams params = new RelativeLayout.LayoutParams(60, 40);
        params.topMargin = y;
        params.leftMargin = x;

箭头绘制,但在一些时髦的地方。我可以使用数学或更改参数,直到它在一个视图中看起来不错,但这只是许多箭头中的第一个,需要支持许多设备。我真的需要传递按钮的位置,而不是在时髦的地方绘制。

4

1 回答 1

0

如果我对您的理解正确,您正在尝试在 Fragment 顶部覆盖一个半透明的帮助屏幕。该覆盖图说明了下面 Fragment 视图的 UI 元素。

所以有两种可能:

选项1

在启动帮助屏幕 Fragment / Activity 之前,您需要获取要为其提供帮助的所有视图元素的位置信息。

您可以为此使用View.getLocationOnScreen

然后将位置数据与每个 UI 元素的标识符一起传递到帮助屏幕。例如,作为 Intent 额外值。

您的帮助组件需要获取这些坐标并计算箭头的绝对位置。

选项 2

Create a help layout XML file that has the same alignments and dimensions like your Fragment's view. Use that help layout to correctly position your labels and arrow graphics. Use margins / paddings for positioning these elements.

于 2012-06-25T21:10:49.973 回答