Как ссылаться на объект в нижнем фрагменте в Android

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 приносит мне странные результаты. Кнопка, которую я пытаюсь нарисовать стрелкой, также находится в правом нижнем углу экрана с некоторым дополнением внизу и справа. Координаты, которые я получаю, - x = 1319 и 716 на Sony GTV. Если я использую

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

Стрела рисует, но в некоторых забавных местах. Я могу использовать математику или изменять параметры до тех пор, пока она не будет выглядеть хорошо в одном представлении, но это только первая из многих стрелок, и многие устройства должны поддерживаться. Мне действительно нужно просто передать расположение кнопки и не рисовать в фанки.

  • 0
    сделать объект глобальным?
Теги:
android-fragments

1 ответ

0
Лучший ответ

Если я правильно вас понимаю, вы пытаетесь наложить полупрозрачный экран справки поверх вашего фрагмента. Этот оверлей иллюстрирует элементы пользовательского интерфейса в представлении "Фрагмент" ниже.

Для этого есть две возможности:

Опция 1

Перед запуском экрана справки Fragment/Activity вам нужно получить информацию о позиции всех элементов вида, для которых вы хотите предоставить помощь.

Для этого вы можете использовать View.getLocationOnScreen.

Затем передайте данные местоположения вместе с идентификатором для каждого элемента пользовательского интерфейса на экран справки. Например, дополнительные значения Intent.

Ваш компонент помощи должен принимать эти координаты и вычислять абсолютные позиции ваших стрелок.

Вариант 2

Создайте XML файл макета справки, который имеет те же выравнивания и размеры, что и ваш фрагмент. Используйте этот макет справки, чтобы правильно позиционировать ваши метки и стрелочную графику. Используйте поля /paddings для позиционирования этих элементов.

  • 0
    Я думаю, что вариант 1 - это то, что я ищу. Я читал на getLocationOnScreen раньше, но не думал о том, чтобы получить его ДО того, как нарисовать макет справки сверху. Я собираюсь дать этому попробовать. Благодарю.
  • 0
    Ну, это дает мне местоположения (я думаю правильные), но это не рисует сейчас.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню