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

#android #imageview

#Android #просмотр изображения

Вопрос:

У меня есть набор из 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 я хочу динамически настраивать фон изображения. то есть, если значение currentpoi равно 3, фон 3 изображений должен быть изменен. Сколько бы раз цикл for повторял, что фон многих изображений должен быть изменен. Надеюсь, теперь вопрос ясен.

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

Комментарии:

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

Ответ №1:

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

Я поместил все идентификаторы в массив как

 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. Спасибо за вашу помощь. Я отлажу вашу точку зрения, чтобы увидеть, что пошло не так на моей стороне

Ответ №2:

Создайте массив 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);
}
  

Ответ №3:

вы можете сделать это, установив имя объектов рисования примерно так: 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()));
}
  

Комментарии:

1. Это не устанавливает фон для нескольких изображений. Он устанавливает фон для одного и того же изображения несколько раз.

Ответ №4:

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

 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]);}
  

Комментарии:

1. Это приведет к многократному изменению фона на одном и том же изображении. Я не думаю, что это то, что желательно.

2. Он хочет изменить фон для нескольких просмотров изображений в зависимости от значения currentPoi. Если это 3, то у первых трех (из 10) изображений должен быть изменен фон. В вашем коде было 5 фонов, и, если currentPoi равен 3, фон на одном изображении меняется 3 раза.

3. Это было бы похоже на то, как если бы я попросил вас покрасить стены комнаты в красный, зеленый, синий и оранжевый цвета, и в итоге вы покрасили одну стену в красный цвет, затем ту же стену в зеленый, а затем в синий и оранжевый. В итоге я получил бы одну оранжевую стену вместо четырех окрашенных стен, о которых я просил.

4. @goto10, да, точно.. Вот в чем мой вопрос

5. В моем ответе рассказывается, как это сделать.

Ответ №5:

Вы можете создать массив ваших изображений, а затем изменить их в цикле 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, поэтому убедитесь, что здесь нет случайной ошибки.

Ответ №6:

Вам нужно будет присвоить вашим 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 Замените пакетом вашего приложения.

Комментарии:

1. можете ли вы сказать мне, каким будет imageview в imageview.setBackgroundResource (R.drawable. progressgreen);?

2. ImageView устанавливается в предыдущей строке, которая просматривает ImageView на основе идентификатора. Идентификатор вычисляется из имени ImageView. Я добавлю несколько комментариев к коду, чтобы сделать его немного более понятным.

3. да, понял, но есть одно глупое сомнение, pb, на которое вы ссылаетесь, является ли объект просмотра изображения правильным?

4. Да. pb1, pb2 и т. Д. Являются представлениями изображений.

5. Он выдает мне значение null в строке ImageView ImageView = (ImageView) findViewById(imageViewId); для ImageView, хотя в предыдущей строке imageViewId не равен null