我正在尝试构建一个将在媒体播放器上运行的帮助屏幕。这个想法是在当前视图的顶部放置一个具有透明主题的片段。(有关基本思想,请参阅如何创建类似于您在一些 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;
箭头绘制,但在一些时髦的地方。我可以使用数学或更改参数,直到它在一个视图中看起来不错,但这只是许多箭头中的第一个,需要支持许多设备。我真的需要传递按钮的位置,而不是在时髦的地方绘制。