Как добавить FrameLayout и ImageViews в него программным способом?

1

В SO есть много похожих вопросов, но затем, пожалуйста, уделите время, чтобы прочитать мой вопрос.

Мне нужно создать программный интерфейс, который будет иметь несколько ImageView, все они расположены в другом месте экрана и имеют связанные события кликов (его игровое приложение). Я обнаружил, что FrameLayout является подходящим выбором, где я могу самостоятельно установить поля и разместить его в нужном месте.

Теперь я смущен, должен ли иметь FrameLayout для каждого отдельного ImageView я создаю, или для сохранения единственного FrameLayout и добавления в него всех ImageViews, но задайте каждое изображение в другом месте.

В любом случае, как я могу добавить FrameLayout и ImageView в него, программно, а также установить его маржу таким образом, чтобы ее можно было размещать в любом месте экрана.

Обратите внимание, что мой основной холст, который будет содержать все эти ImageViews, имеет фон, а холст - это LinearLayout установленный через XML, поэтому у моего onCreate() уже установлен setContentView(R.layout.game_canvas); , и я бы использовал addContentView() для добавления дополнительных представлений, но этот метод также принимает объект LayoutParams как второй параметр, так что именно я должен установить для этого, когда я добавляю свои FrameLayouts с помощью этого метода?

Мой вопрос может запутать себя, поэтому, пожалуйста, дайте мне знать, если мне нужно уточнить.

Теги:
android-layout

1 ответ

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

FrameLayouts предназначены только для того, чтобы удерживать только один вид, поэтому на самом деле это не самый подходящий вариант.

Используйте RelativeLayout, чтобы удерживать все ваши ImageView. Вы можете разместить каждый ImageView, установив поля в своих LayoutParams.

Например, следующий код помещает ImageView в координаты 50,50:

RelativeLayout imgLayout = new RelativeLayout(this);

ImageView iv = new ImageView(this);
iv.setImageResource(R.drawable.an_image);

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

lp.setMargins(50, 50, 0, 0);
lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);

imgLayout.addView(iv, lp);

Затем вы можете добавить этот RelativeLayout в свой основной LinearLayout, используя его метод addView().

  • 0
    Позволит ли RelativeLayout своим дочерним ImageView перекрывать друг друга на несколько пикселей (например, игральные карты, сложенные как в руке)?
  • 2
    Да, они делают. Порядок определяется порядком их добавления.
Показать ещё 1 комментарий

Ещё вопросы

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