Как динамически добавлять компоненты просмотра из активности
Я пытаюсь создать пользовательский интерфейс динамически. Я успешно создал вид и загрузил фоновое изображение. Я создал два дополнительных небольших элемента вида для отображения на фоне. Моя проблема в том, что я не смог найти ни одного совета / инструкции, который бы говорил мне, как рисовать маленькие виды. Кажется, что это должно быть тривиальным упражнением, и я предполагаю, что это просто поиск правильных ссылок. Надеюсь, кто-то там может указать мне правильное направление.
Вот моя активность:
public class GhostActivity extends Activity implements OnTouchListener
{
private DrawView ghostView;
public Card mCard1, mCard2;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
// ToDo add your GUI initialization code here
super.onCreate(savedInstanceState);
// requesting to turn the title OFF
requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
ghostView = new DrawView(this);
setContentView(ghostView);
//get the window size
Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
Context context = getApplicationContext();
//create view items with initial positions
Point startPoint;
startPoint = new Point();
startPoint.x = 5;
startPoint.y = 3;
mCard1 = new Card(context, 1, R.drawable.bol_geel, startPoint);
startPoint.x = 5;
startPoint.y = 43;
mCard2 = new Card(context, 2, R.drawable.bol_rood, startPoint);
//now display them on the ghostView *****************HOW?
// set the callbacks
ghostView.setOnTouchListener(this);
mCard1.setOnTouchListener(this);
mCard2.setOnTouchListener(this);
}
а вот и вид;
public class DrawView extends View
{
Drawable bg ;
public DrawView(Context context) {
super(context);
//setFocusable(true);
Drawable bg = this.getResources().getDrawable(R.drawable.bubbleblue480x800);
setBackgroundDrawable(bg);
}
@Override protected void onDraw(Canvas canvas) {
// canvas.drawColor(0x0000000); //if you want another background color
//draw on the canvas
}
}
редактировать: я считаю, что моя проблема заключается в том, чтобы передать указатель на холст ghostView. что заставляет меня думать, что если я создаю детей в ghostView, а затем вызываю их метод.draw, они появляются точно так, как я ожидал.
@Override protected void onDraw(Canvas canvas) {
canvas.drawColor(0x0000000); //if you want another background color
//draw the cards on the canvas
mCard1.draw(canvas);
mCard2.draw(canvas);
}
поэтому на данный момент мне интересно, как получить ссылочный указатель на холст ghostView. Честно говоря, я нахожу всю деятельность - просмотр отношений запутанным.
Изменить: я использовал другой подход, основанный на деталях в этом руководстве http://www.kellbot.com/2009/06/android-hello-circle/ Он использует FrameLayout, и, кажется, я могу достичь своей цели.
2 ответа
Внутри вашего призрачного вида сначала добавьте макет, например, Линейный или Относительный. Только тогда вы сможете добавить представления внутри этого макета, вы не можете просто добавить представление в XML-файл.
Или вы можете создать динамический макет, тогда только вы можете добавить вид внутри этого макета.
RelativeLayout relative= new RelativeLayout(findViewById(R.id.your relativeLayoutID));
relative.addView(child);
У ребенка может быть что угодно, кнопка просмотра текста и виджет.
Чтобы динамически добавить представление для просмотра, ваш класс должен выходить из класса ViewGroup или LinearLayout, после чего вы сможете вызывать метод addView.