Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте.

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


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

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

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

Спасибо за любой совет.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.02.2016, 17:42
Ответы с готовыми решениями:

Треугольник с расчетом всех углов a, b, c и расчетом длины перпендикуляров
Не пойму куда и какие функции вписать чтобы он считал еще углы и перепендикуляры... Вот сам треугольник: program trg 1 continue ...

Изменение размеров картинки
привет друзья! есть картинка 100х100 писк. как загрузить её меньшего размера например 20х20? Form1.Picture =...

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

8
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.02.2016, 19:22
надо видеть разметку активити
и вопрос, а почему бы не использовать разные там match_parent и wrap_content ?
0
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
20.02.2016, 19:35  [ТС]
Каждое событие выводится в такую разметку. Но вряд-ли это поможет.
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
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
20.02.2016, 19:43
eventDescription это TextView вылазит?
а что если не gone а invisible?
0
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
20.02.2016, 23:49  [ТС]
Цитата Сообщение от Паблито Посмотреть сообщение
eventDescription это TextView вылазит?
Не понял вопроса.

Цитата Сообщение от Паблито Посмотреть сообщение
а что если не gone а invisible?
Так invisible - это же не то - пространство под элемент видно, скрывается только содержимое. Попробовал сейчас установить высоту в 0, чтобы добиться нужного эффекта, но в этом случае не вызывается обработчик OnPreDrawListener, анимация не отрабатывает и eventDescription не отображается вообще.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
22.02.2016, 11:51
просто по вопросу, картинке и разметке ничего непонятно что там где и что не должно вылазить
0
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 14:34  [ТС]
Цитата Сообщение от Паблито Посмотреть сообщение
просто по вопросу, картинке и разметке ничего непонятно что там где и что не должно вылазить
При клике на "Экскурсия" сворачивается и разворачивается текст с картинкой. В разметке это eventDescription.
0
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 15:33  [ТС]
Нашел вот такой ответ на 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
0 / 0 / 0
Регистрация: 20.02.2016
Сообщений: 9
23.02.2016, 15:55  [ТС]
Кажется, получилось, но всё равно не до конца. Вполне возможно, что это просто случайность.
Если вычислять высоту так
Java
1
2
3
4
            ((TextView)container).setHeight(container.getHeight() + imageHeight + container.getPaddingBottom() + container.getPaddingTop());
            invalidateSelf();
            container.requestLayout();
            container.invalidate();
то большая часть картинки отображается, и всё равно с десяток пикселей снизу обрезается - видно на скриншоте по тексту.

Да и не уверен, что рассчёт высоты так делать правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2016, 15:55
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru