Установить размер ImageView в пикселях во время выполнения - PullRequest
0 голосов
/ 29 мая 2011

Я хочу поместить 8 больших пальцев изображения в одну горизонтальную линию, используя всю доступную ширину.
Изображения извлекаются из веб-службы, которая позволяет мне указать размеры.
Я попробовал следующее:

int widthPx = container.getWidth();
LinearLayout thumbs = (LinearLayout)curView.findViewById(R.id.thumbs);
    for(int i=0; i<pics.length; i++) {
        ImageView iv = new ImageView(mContextt);

        int thumbSize = widthPx / 8;

        try {
            String url = "http://someurl/" + pics[i] + "&width=" + thumbSize  + "&height=" + thumbSize;
            URL imgUrl = new URL(url);
            Drawable imgD = Drawable.createFromStream(imgUrl.openStream(), "src");
            iv.setImageDrawable(imgD);
        }
        catch (Exception e) {
            Log.e(TAG, "loading image failed");
            e.printStackTrace();
        }

        thumbs.addView(iv);
    }

В превью LinearLayout есть android: layout_width = "fill_parent set. Превью, создаваемое этим кодом, значительно меньше 1/8 ширины. Почему это так? Что будет правильным?

Обновление:
Этот код находится внутри onCreateView фрагмента. В то время как мое значение ширины рассчитывается на основе корневого представления и является правильным, thumbs.getWidth () возвращает 0, хотя представление является раздутым раньше и также должно иметь ширину 480, поскольку для layout_width установлено значение fill_parent. Я не уверен, что это проблема.

Верно ли мое предположение, что компоновка созданных ImageViews по умолчанию установлена ​​на wrap_content? Если нет, как установить это с помощью кода Java?

Ответы [ 2 ]

3 голосов
/ 30 мая 2011

Добавьте ImageView s с фиксированным размером, то есть:

thumbs.addView (iv, new LayoutParams(thumbSize, thumbSize));

Чтобы ответить (частично) на вопросы в комментариях:

ImageView API говорит:

заботится о вычислении своего измерения из изображения, чтобы его можно было использовать в любом менеджере компоновки

, поэтому он, вероятно, принимает 60 пикселей160 точек на дюйм (я могу ошибаться).

0 голосов
/ 29 мая 2011

Я бы предложил использовать это:

widthPx = getWindowManager().getDefaultDisplay().getWidth();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...