2014-10-03 4 views
0

В настоящее время я добавлять изображения с помощью XML со всей R.id.x методом с помощью следующей функции:Android добавить ImageView программно

public void Image(int ID, int x, int y){ 
    ImageView iv = (ImageView) findViewById(ID); 
    RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    position.setMargins(x, y, 0, 0); 

    iv.setLayoutParams(position); 
} 

я написал новую функцию, чтобы получить эти изображения на экране программно вместо разбора их в XML, с помощью вышеупомянутых тем/вопросов, которые я искал и придумал это:

public void ImageRAW(int ID, int x, int y){ 
    ImageView iv = new ImageView(c); 
    iv.setImageResource(ID); 
    RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    position.setMargins(x, y, 0, 0); 

    iv.setLayoutParams(position); 
    rl.addView(iv); 
} 

Но это не сработало. Я также попытался добавить следующую строку: iv.setVisibility (View.VISIBLE);

И в отношении к переменным гх и с:

private Context c; 
private RelativeLayout rl; 

public void SetUtilContext(Context context){ 
    c = context; 
    rl = new RelativeLayout(context); 
} 

выше функция вызывается в любой деятельности, в OnCreate() функции и устанавливает текущий контекст UtilLib в и RelativeLayout для рисования соответственно.

Функция ImageRAW() то, что я хотел бы использовать, чтобы заменить старый Image() функцию, чтобы сделать вещи проще для меня. Как я мог заставить это работать?

+0

Я надеюсь, что ID в методе findViewById() не совпадает с ID в методе setImageResource(). Идентификатор изображения должен быть R.id.x и ImageRAW что-то вроде R.drawable.x – Incredible

+1

Вы создали RelativeLayout, но являются ли они частью содержимого экрана? – Karakuri

+0

@Incredible Да, для функции ImageRAW я поставляю R.drawable.x – Zubaja

ответ

1

Попробуйте добавить это перед вашим SetUtilContext():

RelativeLayout menu = findViewById(R.layout.menu); 

И это в конце вашего Метод ImageRAW():

menu.addChild(rl); 
+0

Твой подход сработал, но мне пришлось немного подправить его. ImageRAW (R.drawable.head, R.id.game, 250, 100); Это потому, что я использую tabhost, поэтому предоставление макета в качестве прямого параметра не будет работать; поэтому идентификатор макета должен быть передан. – Zubaja

0

По желанию InCRedible, моя OnCreate функция, где я проверяю функции:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.menu); 

    SetUtilContext(this); 
    Image(R.id.logo, 0, 0); 
    GetScreenSize(); 

    ImageButton(R.id.start_btn 
       , (screenWidth/2)-(GetImageWidth(R.id.start_btn)/2)  
       , 48+GetImageHeight(R.id.logo)); 
    ImageButton(R.id.options_btn 
       , (screenWidth/2)-(GetImageWidth(R.id.options_btn)/2) 
       , 96+GetImageHeight(R.id.logo)+GetImageHeight(R.id.start_btn)); 
    ImageButton(R.id.about_btn 
       , (screenWidth/2)-(GetImageWidth(R.id.about_btn)/2)  
       , 144+GetImageHeight(R.id.logo)+(GetImageHeight(R.id.start_btn)*2)); 
    ImageButton(R.id.exit_btn 
       , (screenWidth/2)-(GetImageWidth(R.id.exit_btn)/2)  
       , 192+GetImageHeight(R.id.logo)+(GetImageHeight(R.id.start_btn)*3)); 
    PlayAudio(R.raw.theme, true); 

    ImageRAW(R.drawable.head, 0, GetImageHeight(R.id.logo)); 
} 
+0

Вы создаете новый RelativeLayout, создавая для него новые LayoutParams, добавляя изображение в этот RelativeLayout, но я не вижу, где вы добавляете этот RelativeLayout в свою деятельность. – Incredible

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