Диаграмма, реализация "дорисовки"

Ответить
парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Диаграмма, реализация "дорисовки"

Сообщение парень » 06 янв 2014, 10:48

Здравствуйте форумчане.

В своем приложении приступил к написанию раздела "отчеты".
В нем будет сверху круговая диаграмма.
Снизу список. При нажатии на элемент списка должна слегка меняться диаграмма (типо выделенный элемент выделяется).

Все что касается графики для меня темный лес, впервые сегодня начал читать про это.

Помогите со структурой. Сейчас пока так, но не знаю правильно ли это?

в фрагменте (в разделе приложения)
объявляю Bitmap и canvas;

далее в onCreateView
создается список, наполняется, обработчики ну все как обычно - обычно ведь так? :)
на обработчик списка "вешаем" метод drawMySub - о нем позже.
потом
вызывается метод drawMy(чтобы не "забивать" OnCreateView стараюсь побольше методов писать и просто их вызывать)

в методе drawMy:
создаем Bitmap и canvas;
[syntax=java]bitmap = Bitmap.createBitmap(width,height,Config.ARGB_8888);

canvas = new Canvas(bitmap);[/syntax]

потом Paint;

далее получаем набор данных с группировкой по "категориям" и цикл по по ним.
{
В зависимости от категории меняем цвет (у каждой свой) в Paint.
рисуем дугу
}

Находим контейнер для рисунка ImageView в фрагменте и задаем созданную картинку.
метод закончился.
Это все получилось, все красиво. Как надо.

теперь при нажатии на Item списка нам надо "дорисовать" нашу диаграмму.
В обработчике нажатия на Itam в ListView у нас вызывается метод drawMySub .
Логика его:
задаем Paint нужного цвета
bitmap и canvas у нас определены и созданы, поэтому мы просто рисуем то что надо.
Я рисую сначала овал с фоном, диаметра чуть меньше диаграммы - чтобы "закрасить" середину. (пока она и так пустая, но сейчас туда что-нибудь нарисуем)

Затем рисую дугу меньшего диаметра нужного нам цвета и т.д.

Затем находим контейнер для рисунка ImageView в фрагменте и СНОВА задаем созданную картинку.

Все работает. Все красиво. Ну, как надо.


Вопросы:
1. Bitmap и Canvas - они получаются висят в памяти? Тем то что я буду перерисовывать каждый раз их при клике на меню, как-то связанно с памятью расходуемой? Точнее с ее возможной нехваткой?
2. Верна ли логика данного решения?
3. Как можно добавить анимацию на рисунок? (Например в центр диаграммы я планирую выводить % выбранной категории от общей массы, хотелось бы его появление анимировать)
4. Вы уже прочитали мой большой вопрос о структуре приложения в другой ветке ? ;) viewtopic.php?f=33&t=3251

Заранее спасибо. Извиняйте за много букв :) и с новым годом!
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Mykola
Сообщения: 132
Зарегистрирован: 26 июл 2013, 12:06

Re: Диаграмма, реализация "дорисовки"

Сообщение Mykola » 13 янв 2014, 16:45

Bitmap и Canvas - они получаются висят в памяти?
Тем то что я буду перерисовывать каждый раз их при клике на меню, как-то связанно с памятью расходуемой? Точнее с ее возможной нехваткой?

Да. Bitmap это нативный обьект с 11 апи, по этому нужно вызывать метод recycle(); Удалять "старый" Bitmap.

Верна ли логика данного решения?
https://www.google.com.ua/search?q=andr ... w+tutorial

Вы уже прочитали мой большой вопрос о структуре приложения в другой ветке ? многа букав))

Ответить