Динамическое изменение фона изображения

У меня есть набор из 10 изображений в моем макете. Я дал им последовательный идентификатор также как

android:id="@+id/pb1" android:id="@+id/pb2" 

Теперь я хочу динамически менять фон.

  int totalPoi = listOfPOI.size(); int currentPoi = (j/totalPoi)*10; for (i=1;i<=currentPoi;i++) { imageview.setBackgroundResource(R.drawable.progressgreen); } 

Теперь внутри цикла for я хочу динамически установить фоновый режим изображения. I, e, если значение currentpoi равно 3, фон из 3 изображений должен быть изменен. Как бы то ни было, когда цикл for повторяется, нужно изменить фоновый фон многих изображений. Надеюсь, теперь вопрос ясен.

Примечание. У меня есть только 1 изображение с прогрессивной разверткой, которое должно быть установлено в 10 изображений.

Наконец я сделал это следующим образом,

Я поместил все id в массив как

 int[] imageViews = {R.id.pb1, R.id.pb2,R.id.pb3,R.id.pb4,R.id.pb5,R.id.pb6,R.id.pb7,R.id.pb8,R.id.pb9,R.id.pb10}; 

Теперь:

 int pindex = 0; for (pindex; pindex <currentPoi; pindex++) { ImageView img = (ImageView) findViewById(imageViews[pindex]) ; img.setImageResource(R.drawable.progressgreen); } 

Теперь я могу динамически менять изображения.

@ Goto10. Спасибо за вашу помощь. Я отлажу вашу точку зрения, чтобы увидеть, что пошло не так на моей стороне

Вы можете сделать это, установив имя drawables что-то вроде: img_1, img_2, img_3 …

 for (i=1;i<=currentPoi;i++) { ImageView imageview=(ImageView) findViewById(getResources().getIdentifier("imgView_"+i, "id", getPackageName())); imageview.setImageResource(getResources().getIdentifier("img_"+i, "drawable", getPackageName())); } 

Создайте массив ImageView:

 ImageView views[] = new ImageView[10]; views[0] = (ImageView)findViewById(R.id.pb1); ... views[9] = (ImageView)findViewById(R.id.pb10); 

Теперь повторите цикл, чтобы установить фон изображений следующим образом:

 for (i=1;i<=currentPoi;i++) { views[i-1].setBackgroundResource(R.drawable.progressgreen); } 

Попробуйте этот код ….. Создайте изображение Array ..

 private Integer[] mThumbIds = { R.drawable.bg_img_1, R.drawable.bg_img_2, R.drawable.bg_img_3, R.drawable.bg_img_4, R.drawable.bg_img_5 }; 

И чем изменить код

 int totalPoi = listOfPOI.size(); int currentPoi = (j/totalPoi)*10; for (i=1;i<=currentPoi;i++) { imageview.setBackgroundResource(mThumbIds[i]);} 

Вы можете создать массив ваших ImageViews, а затем изменить их в своем цикле for.

 ImageView views[] = new ImageView[10]; views[0] = (ImageView)findViewById(R.id.imageView0); ... views[9] = (ImageView)findViewById(R.id.imageView9); 

А затем измените цикл for на:

 for (i=1;i<=currentPoi;i++) { views[currentPoi].setBackgroundResource(R.drawable.progressgreen); } 

Массивы начинаются с индекса 0, поэтому убедитесь, что здесь нет ошибки.

Вам нужно будет предоставить идентификаторы IDView ImageViews, такие как «@ + id / pb1» и «@ + id / pb2» и т. Д. Затем вы можете получить каждый из них в цикле следующим образом:

 for (i=1;i<=currentPoi;i++) { // Find the image view based on it's name. We know it's pbx where 'x' is a number // so we concatenate "pb" with the value of i in our loop to get the name // of the identifier we're looking for. getResources.getIdentifier() is able to use // this string value to find the ID of the imageView int imageViewId = getResources().getIdentifier("pb" + i, "id", "com.your.package.name"); // Use the ID retrieved in the previous line to look up the ImageView object ImageView imageView = (ImageView) findViewById(imageViewId); // Set the background for the ImageView imageView.setBackgroundResource(R.drawable.progressgreen); } 

Замените com.your.package.name вашего приложения.