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

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

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

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

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

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

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

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

Столкнулся с 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     Ошибка с расчётом размеров картинки в скрытом элементе
Посмотрите здесь:

OnTouch на элементе меню - Программирование Android
как присвоить setOnTouchListener элементу меню?

Рисование в элементе view - Программирование Android
Можно ли использовать canvas внутри какого-либо view? Находил примеры, когда можно рисовать примитивы на всём экране, при этом нельзя...

TextView в элементе ListView - Программирование Android
Имеется ListView, у него как положена имеется кастомный адаптер с довольно усложненной логикой. При нажатии на одном из пунктов содержимое...

Клик по кнопке в элементе listView - Программирование Android
Доброго времени суток. Пишу свое первое приложение под андроид. На данный момент получаю листвью, в каждом поле которого отображаются 4...

Рисование на View элементе (Canvas) - Программирование Android
Я создал кастомный View элемент(календарь), который наследует View и переопределяет метод onDraw. Надо сделать этот его интерактивным, для...

Реализация PopupMenu в элементе CardView - Программирование Android
Всем привет! Нужна помощь в реализации одного момента. Есть CardView, и в каждом элементе выпадающее меню (типа контекстного) с...

Получить доступ к ImageView в одном конкретном элементе ListView - Программирование Android
Есть layout элемента ListView <?xml version="1.0" encoding="utf-8"?> <LinearLayout...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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>
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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 не отображается вообще.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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     Ошибка с расчётом размеров картинки в скрытом элементе
Еще ссылки по теме:

При нажатии на элемент ListView вывести новое Activity с информацией об этом элементе - Программирование Android
Здравствуйте! Помогите пожалуйста! В общем есть список ListView с названиями кафе и ресторанов, надо сделать так чтобы при нажатии на...

Адаптация размеров именно текста - Программирование Android
еще точнее - textview указываю размеры в sp и на больших разрешениях скажем 2560 на 1400 (galaxy 5) - текст ОЧЕНЬ мелкий. а в...

Определение размеров экрана устройства - Программирование Android
Хочу отцентрировать несколько кнопок на Activity. Кнопки кидаю в контейнер. LinearLayout myContainer = new LinearLayout(this); ...

Программное изменение размеров ImageView - Программирование Android
Для всех View задаю размер через .getLayoutParams().width = mywidth; Но для ImageView это почему-то не работает ( пробовал так же...

Программное изменение размеров Button - Программирование Android
Добрый день! Начал изучать программирование на андроид. Решил написать простенькую игру. Нужно программным способом разместить на...


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

Или воспользуйтесь поиском по форуму:
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     Ошибка с расчётом размеров картинки в скрытом элементе
Ответ Создать тему
Опции темы

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