Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
#1

Ошибка с расчётом размеров картинки в скрытом элементе - Программирование Android

20.02.2016, 17:42. Просмотров 246. Ответов 8
Метки нет (Все метки)

Здравствуйте.

Разрабатываю приложение для хранения расписания. Выглядит как-то так.
Ошибка с расчётом размеров картинки в скрытом элементе

При клике на событие (в данном случае "Экскурсия") снизу от него разворачивается детальное описание события. На скриншоте уже развёрнуто.

Столкнулся с 2-мя проблемами
1. Вот такие наплывы текста на рисунки, как на скрине. Не всегда и не везде, но есть. Читал даже мнение, что картинки в TextView лучше не вставлять.

2. Не получается нормально расчитать размеры (setBounds) и позиционировать рисунок. Загрузка картинок сделана с помощью Picasso, т.е. асинхронная. Плюс на момент загрузки контейнер картинки (TextView) является скрытым и все его размеры равны нулю. Пробовал расчитывать размеры по окружающим элементам, либо вообще задавать их вручную - размеры картинки изменяются, но высота контейнера остаётся неизменной либо расчитывается неправильно. Во всяком случае, картинка туда не вмещается. Не могу понять, почему так происходит, ведь на момент начала анимации развёртывания картинка уже загружена и размеры его известны. Т.е. высота должна соответствовать. Пробовал вешать событие preDraw на контейнер - помогает, но не сильно. Размеры всё равно неправильные. Даже более того, если оставлять при старте контейнер не свёрнутым, т.е. уже известны реальные размеры - всё равно картинка вылазит за низ контейнера (как видно на скриншоте). В коде ничего специфического нет, всё на уровне примера со stackoverflow. Единственное, в конце метода onBitmapLoaded пробовал добавлять container.invalidate() и/или вручную расчитывать высоту контейнера container.setMinimumHeight(container.getHeight() + imageHeight). Не помогает.

Спасибо за любой совет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2016, 17:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка с расчётом размеров картинки в скрытом элементе (Программирование Android):

TableLayout. Кнопки получаются разных размеров (кнопки-картинки) - Программирование Android
Я решил делать приложение в TableLayout. Добавил TableRow, в него 3 кнопки. Но кнопки у меня картинки, соответственно я в свойствах кнопок...

Определение размеров картинки - PHP
Как можно при загрузке с формы файла на сервер узнать ее ширину и высоту? Я написал скрипт фотогалереи, но только что дошло, что...

Уменьшение размеров картинки - Delphi
Здравствуйте, подскажите способы сжатия расширения изображения формата bmp,jpeg в делфи с минимальной потерей качества,какие операторы за...

Изменение размеров картинки - HTML, CSS
Ставлю фиксированные размеры а картинка все равно сохраняет пропорции. max-height не помогает

Автоматическое подставление размеров картинки - PHP
<?php while ($content->looping()) { $meta =& $content->meta(); ?> <li><a data-slide-index="<?php echo $count; ?>"...

Быстрое определение размеров картинки - PHP
Доброго времени суток уважаемые форумчане. Как можно быстро определить высоту и ширину картинки? GetImageSize на сколько я понял...

8
Pablito
2613 / 2096 / 651
Регистрация: 12.05.2014
Сообщений: 7,346
Завершенные тесты: 1
20.02.2016, 19:22 #2
надо видеть разметку активити
и вопрос, а почему бы не использовать разные там match_parent и wrap_content ?
0
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
20.02.2016, 19:35  [ТС] #3
Каждое событие выводится в такую разметку. Но вряд-ли это поможет.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:background="@drawable/border">
 
    <RelativeLayout
            android:orientation="horizontal"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingBottom="5dp">
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/ListRow"
                android:id="@+id/eventTitle"/>
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                style="@style/TimeRange"
                android:id="@+id/timeRange"/>
    </RelativeLayout>
    <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            style="@style/EventDescription"
            android:id="@+id/eventDescription"/>
 
</LinearLayout>
0
Pablito
2613 / 2096 / 651
Регистрация: 12.05.2014
Сообщений: 7,346
Завершенные тесты: 1
20.02.2016, 19:43 #4
eventDescription это TextView вылазит?
а что если не gone а invisible?
0
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
20.02.2016, 23:49  [ТС] #5
Цитата Сообщение от Паблито Посмотреть сообщение
eventDescription это TextView вылазит?
Не понял вопроса.

Цитата Сообщение от Паблито Посмотреть сообщение
а что если не gone а invisible?
Так invisible - это же не то - пространство под элемент видно, скрывается только содержимое. Попробовал сейчас установить высоту в 0, чтобы добиться нужного эффекта, но в этом случае не вызывается обработчик OnPreDrawListener, анимация не отрабатывает и eventDescription не отображается вообще.
0
Pablito
2613 / 2096 / 651
Регистрация: 12.05.2014
Сообщений: 7,346
Завершенные тесты: 1
22.02.2016, 11:51 #6
просто по вопросу, картинке и разметке ничего непонятно что там где и что не должно вылазить
0
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 14:34  [ТС] #7
Цитата Сообщение от Паблито Посмотреть сообщение
просто по вопросу, картинке и разметке ничего непонятно что там где и что не должно вылазить
При клике на "Экскурсия" сворачивается и разворачивается текст с картинкой. В разметке это eventDescription.
0
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 15:33  [ТС] #8
Нашел вот такой ответ на stackoverflow, попробовал разные варианты, которые там предлагались. Сейчас реализация ImageGetter выглядит так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            setWrappedDrawable(new BitmapDrawable(context.getResources(), bitmap));
            recalculateBounds();
            context = null;
        }
 
        public void recalculateBounds() {
            Drawable tmp = getWrappedDrawable();
            if (!(tmp instanceof BitmapDrawable)) {
                return;
            }
 
            BitmapDrawable d = (BitmapDrawable)tmp;
            Bitmap bitmap = d.getBitmap();
//            float containerWidth = container.getWidth() - container.getPaddingLeft() - container.getPaddingRight();
            float containerWidth = 400;
            int imageWidth, imageHeight;
            if (containerWidth < bitmap.getWidth()) {
                float scale = containerWidth / bitmap.getWidth();
                imageWidth = Math.round(containerWidth);
                imageHeight = Math.round(bitmap.getHeight() * scale);
            } else {
                imageWidth = bitmap.getWidth();
                imageHeight = bitmap.getHeight();
            }
            d.setBounds(new Rect(0, 0, imageWidth, imageHeight));
            container.setMinimumHeight(container.getHeight() + imageHeight);
            invalidateSelf();
            container.requestLayout();
            container.invalidate();
        }
но не поменялось практически ничего - высота контейнера TextView стала чуть выше, но они всё равно обрезаются.
Ошибка с расчётом размеров картинки в скрытом элементе
0
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 15:55  [ТС] #9
Кажется, получилось, но всё равно не до конца. Вполне возможно, что это просто случайность.
Если вычислять высоту так
Java
1
2
3
4
            ((TextView)container).setHeight(container.getHeight() + imageHeight + container.getPaddingBottom() + container.getPaddingTop());
            invalidateSelf();
            container.requestLayout();
            container.invalidate();
то большая часть картинки отображается, и всё равно с десяток пикселей снизу обрезается - видно на скриншоте по тексту.
Ошибка с расчётом размеров картинки в скрытом элементе
Да и не уверен, что рассчёт высоты так делать правильно.
0
23.02.2016, 15:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2016, 15:55
Привет! Вот еще темы с ответами:

Копирование и изменение размеров картинки - PHP
Добрый день! Помогите решить задачу. Необходимо взять картинку и скопировать ее в 2 папки. В первой папке будет просто копия изображения. А...

Выравнивание размеров ТImage по размерам картинки - C++ Builder
Ребята ,подскажите пожалуйста.ведь есть такой параметров у TImage,выравнивание размеров ТImage по размерам загруженной в него картинки,или...

Класс Bitmap, преобразование размеров картинки с picturebox - C#
мне нужна помощь тоесть небольшая потсказка Bitmap img = new Bitmap(picture.Image); Color c; int x = e.X;...

Обрезание картинки при изменении размеров окна браузера - HTML, CSS
Подскажите как сделать так, чтобы картинка, обрезалась пропорционально и слева и справа при изменении ширины окна браузера. По умолчанию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru