В SO есть много похожих вопросов, но затем, пожалуйста, уделите время, чтобы прочитать мой вопрос.
Мне нужно создать программный интерфейс, который будет иметь несколько ImageView
, все они расположены в другом месте экрана и имеют связанные события кликов (его игровое приложение). Я обнаружил, что FrameLayout
является подходящим выбором, где я могу самостоятельно установить поля и разместить его в нужном месте.
Теперь я смущен, должен ли иметь FrameLayout
для каждого отдельного ImageView
я создаю, или для сохранения единственного FrameLayout и добавления в него всех ImageViews, но задайте каждое изображение в другом месте.
В любом случае, как я могу добавить FrameLayout и ImageView в него, программно, а также установить его маржу таким образом, чтобы ее можно было размещать в любом месте экрана.
Обратите внимание, что мой основной холст, который будет содержать все эти ImageViews, имеет фон, а холст - это LinearLayout
установленный через XML, поэтому у моего onCreate()
уже установлен setContentView(R.layout.game_canvas);
, и я бы использовал addContentView()
для добавления дополнительных представлений, но этот метод также принимает объект LayoutParams
как второй параметр, так что именно я должен установить для этого, когда я добавляю свои FrameLayouts с помощью этого метода?
Мой вопрос может запутать себя, поэтому, пожалуйста, дайте мне знать, если мне нужно уточнить.
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().
RelativeLayout
своим дочернимImageView
перекрывать друг друга на несколько пикселей (например, игральные карты, сложенные как в руке)?