#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