2012-06-21 2 views
1

Существует много подобных вопросов, заданных в SO, но затем также, пожалуйста, найдите время, чтобы прочитать мой вопрос.Как добавить в него FrameLayout и ImageViews Programmatically?

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

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

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

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

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

ответ

5

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

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

E.g. Следующий код будет разместить 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' перекрывать друг друга на несколько пикселей (подумайте о игральных картах, уложенных как в руке)? – Kushal

+2

Да, они делают. Порядок определяется порядком их добавления. – nmw

+0

@nmw как добавить фрагмент, используя этот код. Как вы загружаете изображение, можно ли заменить фрагмент в этом коде? – Andrain

Смежные вопросы