Как динамически добавлять компоненты просмотра из активности

Я пытаюсь создать пользовательский интерфейс динамически. Я успешно создал вид и загрузил фоновое изображение. Я создал два дополнительных небольших элемента вида для отображения на фоне. Моя проблема в том, что я не смог найти ни одного совета / инструкции, который бы говорил мне, как рисовать маленькие виды. Кажется, что это должно быть тривиальным упражнением, и я предполагаю, что это просто поиск правильных ссылок. Надеюсь, кто-то там может указать мне правильное направление.

Вот моя активность:

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.

Другие вопросы по тегам