Итак, у меня есть функция для приложения для Android, которое должно принимать любое количество изображений и отображать их по 5 изображений для каждой строки, по какой-то причине, когда она переходит во вторую строку, она просто повторяет изображения для первой строки, например если у меня есть 7 фотографий с номерами 1-7, они будут отображать: 12345 12 вот моя функция, спасибо за любой совет.

public void generateImageView(int number, String path){
        //ImageView[] imageViewArray = new ImageView[number];
        int ROW_ITEMS = 5; // 5 images per row
        RelativeLayout rl = (RelativeLayout) findViewById(R.id.RelativeLayout1);
        int limit = number;//limits the number of created imageViews to number
        int rows = limit / ROW_ITEMS;//number of rows
        int leftOver = limit % ROW_ITEMS; //see if we have incomplete rows
        if (leftOver != 0){
            rows += 1;
        }
        int id = 1000;
        int belowId = R.id.send;
        while (rows > 0){
            int realItemsPerRow = ROW_ITEMS;
            if (leftOver != 0 & rows == 1){
                realItemsPerRow = Math.min(ROW_ITEMS,  leftOver);
            }

        for (int i = 0; i < realItemsPerRow; i++){

            Bitmap myBitmap = BitmapFactory.decodeFile(path + i + ".png");
            ImageView imageViewArray = new ImageView(MainActivity.this);
            imageViewArray.setId(id);
            imageViewArray.setImageBitmap(myBitmap);
            RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
            imageViewArray.setPadding(10,10,0,0);
            imageViewArray.setAdjustViewBounds(true);
            imageViewArray.setMaxHeight(80);
            imageViewArray.setMaxWidth(80);
            if (i==0) {
                lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
            } else {
                lp.addRule(RelativeLayout.RIGHT_OF, imageViewArray.getId() -1);
            }
            lp.addRule(RelativeLayout.BELOW, belowId);

            imageViewArray.setLayoutParams(lp);

            rl.addView(imageViewArray);
            id++;
        }
        belowId = id - 1;
        rows--;
0
user1661396 13 Сен 2012 в 00:41

1 ответ

Лучший ответ

Это потому, что вы просто вытягиваете одни и те же изображения для каждой позиции в строке:

Bitmap myBitmap = BitmapFactory.decodeFile(path + i + ".png");

Перед while( rows > 0 ) добавить:

int j = 0;

Затем измените приведенное выше на:

Bitmap myBitmap = BitmapFactory.decodeFile(path + ( j * ROW_ITEMS + i ) + ".png");

И под rows--; добавить:

j++;
1
323go 13 Сен 2012 в 00:52
Не надо! Я занимаюсь этим более 25 лет, и у меня все еще есть один из них, вероятно, раз в неделю. Это помогает иметь другую пару глаз.
 – 
323go
13 Сен 2012 в 01:01