Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
20.02.2016, 17:42     Ошибка с расчётом размеров картинки в скрытом элементе #1
Здравствуйте.

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

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

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

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

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

Определение размеров экрана устройства Android
Программное изменение размеров ImageView Android
Android Получить доступ к ImageView в одном конкретном элементе ListView
TableLayout. Кнопки получаются разных размеров (кнопки-картинки) Android
Рисование в элементе view Android
Android При нажатии на элемент ListView вывести новое Activity с информацией об этом элементе
Android TextView в элементе ListView
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1876 / 1610 / 497
Регистрация: 12.05.2014
Сообщений: 5,819
Завершенные тесты: 1
20.02.2016, 19:22     Ошибка с расчётом размеров картинки в скрытом элементе #2
надо видеть разметку активити
и вопрос, а почему бы не использовать разные там match_parent и wrap_content ?
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>
Паблито
не спать!
1876 / 1610 / 497
Регистрация: 12.05.2014
Сообщений: 5,819
Завершенные тесты: 1
20.02.2016, 19:43     Ошибка с расчётом размеров картинки в скрытом элементе #4
eventDescription это TextView вылазит?
а что если не gone а invisible?
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
20.02.2016, 23:49  [ТС]     Ошибка с расчётом размеров картинки в скрытом элементе #5
Цитата Сообщение от Паблито Посмотреть сообщение
eventDescription это TextView вылазит?
Не понял вопроса.

Цитата Сообщение от Паблито Посмотреть сообщение
а что если не gone а invisible?
Так invisible - это же не то - пространство под элемент видно, скрывается только содержимое. Попробовал сейчас установить высоту в 0, чтобы добиться нужного эффекта, но в этом случае не вызывается обработчик OnPreDrawListener, анимация не отрабатывает и eventDescription не отображается вообще.
Паблито
не спать!
1876 / 1610 / 497
Регистрация: 12.05.2014
Сообщений: 5,819
Завершенные тесты: 1
22.02.2016, 11:51     Ошибка с расчётом размеров картинки в скрытом элементе #6
просто по вопросу, картинке и разметке ничего непонятно что там где и что не должно вылазить
n0dwis
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 14:34  [ТС]     Ошибка с расчётом размеров картинки в скрытом элементе #7
Цитата Сообщение от Паблито Посмотреть сообщение
просто по вопросу, картинке и разметке ничего непонятно что там где и что не должно вылазить
При клике на "Экскурсия" сворачивается и разворачивается текст с картинкой. В разметке это eventDescription.
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 стала чуть выше, но они всё равно обрезаются.
Ошибка с расчётом размеров картинки в скрытом элементе
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2016, 15:55     Ошибка с расчётом размеров картинки в скрытом элементе
Еще ссылки по теме:

Android Адаптация размеров именно текста
Реализация PopupMenu в элементе CardView Android
Android Клик по кнопке в элементе listView
Как обработать нажатие на изображение в элементе listView? Android
Android OnTouch на элементе меню

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

Или воспользуйтесь поиском по форуму:
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();
то большая часть картинки отображается, и всё равно с десяток пикселей снизу обрезается - видно на скриншоте по тексту.
Ошибка с расчётом размеров картинки в скрытом элементе
Да и не уверен, что рассчёт высоты так делать правильно.
Yandex
Объявления
23.02.2016, 15:55     Ошибка с расчётом размеров картинки в скрытом элементе
Ответ Создать тему
Опции темы

Текущее время: 08:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru