Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 20 окт 2017, 02:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 10 фев 2014, 03:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1348
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.

В этом уроке:


- рисуем фигуры
- выводим текст




Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 29 май 2017, 23:19, всего редактировалось 6 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 фев 2014, 17:42 

Зарегистрирован: 07 май 2013, 22:23
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Напишу пару вещей, которые очень мне помогли и которые крайне сложно гуглятся "в лоб"

Очень часто по умолчанию создаётся неизменяемый Bitmap, но это не всегда удобно. Например вам надо немного изменить и пересоздавать объект крайне не выгодно (особенно при обработке фото). Тут и поможет вожможность менять настройки Bitmap (ХХХХХ.inMutable = true).
Код: [ Загрузить ] [ Скрыть ]
  1. BitmapFactory.Options options = new BitmapFactory.Options(); 
  2.                 options.inPreferredConfig=Bitmap.Config.ARGB_8888; 
  3.                 options.inMutable = true; 
  4.                 myBitmap = BitmapFactory.decodeByteArray(data,0,data.length, options); 


Задание смешивания цветов при рисовании объектов одного поверх другого
Код: [ Загрузить ] [ Скрыть ]
  1. Xfermode Xfermode =  new PorterDuffXfermode(PorterDuff.Mode.ADD); 
  2.                 Paint.setXfermode(Xfermode); 


Строка в Манифесте для запроса увеличенного лимита памяти, что очень важно при работе с Bitmap особенно большого размера (например фото)
Код: [ Загрузить ] [ Скрыть ]
  1. android:largeHeap="true" 


Последнюю вещь запишите где-то в сносках в уроках посвящённых графике и фото.
Ибо далеко не очевидная, но очень нужная вещь.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 фев 2014, 10:54 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1348
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Про PorterDuffXfermode-режимы и Bitmap-ключи обязательно расскажу, чуть позже, после основ.
Про android:largeHeap упомяну в разговоре о Bitmap, спасибо!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 фев 2014, 17:24 

Зарегистрирован: 12 янв 2014, 19:15
Сообщений: 8
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Как можно сохранить результат в png, например?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 12 фев 2014, 23:34 

Зарегистрирован: 07 май 2013, 22:23
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
BlizzedRu писал(а):
Как можно сохранить результат в png, например?

http://developer.android.com/reference/ ... tStream%29
http://developer.android.com/reference/ ... ormat.html
т.е. задать пару параметров и скомандовать compress
итоговый стрим записать в файл ;-)
Код: [ Загрузить ] [ Скрыть ]
  1. File sdPath = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + AppDir); 
  2. FileOutputStream FileOutputStream = new FileOutputStream (sdPath, true); 
  3. Bitmap.compress(Bitmap.CompressFormat.JPEG, 90, FileOutputStream); 
  4. FileOutputStream.close(); 
  5. Bitmap.recycle(); 

для png замени jpeg в коде выше
последние две строки закрывают поток и уничтожают bitmap


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 фев 2014, 07:45 

Зарегистрирован: 03 фев 2014, 14:53
Сообщений: 4
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Кстати, если делать Bitmap.compress(Bitmap.CompressFormat.PNG, 90, FileOutputStream), то на сколько я понял параметр сжатия не важен. А если делать формат JPEG, то параметр сжатия не желательно ставить равным 0, иначе может что-то упасть. По крайней мере у меня такое было.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 фев 2014, 14:20 

Зарегистрирован: 07 май 2013, 22:23
Сообщений: 7
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
bladestorm писал(а):
Кстати, если делать Bitmap.compress(Bitmap.CompressFormat.PNG, 90, FileOutputStream), то на сколько я понял параметр сжатия не важен. А если делать формат JPEG, то параметр сжатия не желательно ставить равным 0, иначе может что-то упасть. По крайней мере у меня такое было.

для PNG документация говорит об игнорировании параметра сжатия
а для JPEG существует сжатие 0 ? :?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 фев 2014, 15:47 

Зарегистрирован: 12 янв 2014, 19:15
Сообщений: 8
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Спасибо за подсказки!
Еще вопрос: что делать, если мне нужно совместить элементы xml и вот эту графику?
Например, нужно текстовое поле обычное, а под ним графика


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 15 фев 2014, 23:45 

Зарегистрирован: 15 фев 2014, 23:21
Сообщений: 3
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Здравствуйте! Для моего приложения понадобилась такая функция, которая "оставляет след", когда водишь пальцем по экрану. Я попытался реализовать это так: при обработке касания записываются его координаты в массив, а в методе OnDraw вызываю DrawPoints, которому на вход подаю этот массив, а в конце вызываю invalidate(), для перерисовки. Дело в том, что при быстром ведении пальцем по экрану этот след начинает обрываться, след не сплошной, как будто не хватает скорости обработки касания либо отрисовки. А в приложении с гугл плей всё нормально рисуется. Как можно сделать так, чтобы был сплошной след? Может SurfaceView использовать? Может это из-за массива, но какую функцию вызывать в этом случае, ведь onDraw делает перерисовку?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 25 фев 2014, 21:02 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1348
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.
Посмотрите этот пример: http://www.java2s.com/Code/Android/2D-Graphics/FingerPaintView.htm.
Метод touchMove, там чел использует кривые для ровного рисования.

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 фев 2014, 15:13 

Зарегистрирован: 15 фев 2014, 23:21
Сообщений: 3
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Спасибо, я нашел пример, который переделал под себя: http://habrahabr.ru/post/154193/ Ваш пример я тоже обязательно посмотрю.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 05 мар 2014, 02:12 

Зарегистрирован: 05 мар 2014, 01:39
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Здравствуйте! А возмжно-ли наложить две канвы?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 18:27 

Зарегистрирован: 06 окт 2013, 11:49
Сообщений: 38
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
а как рисовать треугольники?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 мар 2014, 18:46 
Аватар пользователя

Зарегистрирован: 13 ноя 2013, 14:46
Сообщений: 1956
Благодарил (а): 10 раз.
Поблагодарили: 275 раз.
_ILYA_ писал(а):
а как рисовать треугольники?

Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. super.draw(canvas, mapView, true);
  2.  
  3. Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
  4.  
  5. paint.setStrokeWidth(2);
  6. paint.setColor(android.graphics.Color.RED);    
  7. paint.setStyle(Paint.Style.FILL_AND_STROKE);
  8. paint.setAntiAlias(true);
  9.  
  10. Point point1_draw = new Point();        
  11. Point point2_draw = new Point();    
  12. Point point3_draw = new Point();
  13.  
  14. mapView.getProjection().toPixels(point1, point1_draw);
  15. mapView.getProjection().toPixels(point2, point2_draw);
  16. mapView.getProjection().toPixels(point3, point3_draw);
  17.  
  18. Path path = new Path();
  19. path.setFillType(Path.FillType.EVEN_ODD);
  20. path.moveTo(point1_draw.x,point1_draw.y);
  21. path.lineTo(point2_draw.x,point2_draw.y);
  22. path.lineTo(point3_draw.x,point3_draw.y);
  23. path.lineTo(point1_draw.x,point1_draw.y);
  24. path.close();
  25.  
  26. canvas.drawPath(path, paint);
  27.  
  28. //canvas.drawLine(point1_draw.x,point1_draw.y,point2_draw.x,point2_draw.y, paint);
  29.  
  30. return true;
  31.  

or
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. private static final int verticesColors[] = {
  2.     Color.LTGRAY, Color.LTGRAY, Color.LTGRAY, 0xFF000000, 0xFF000000, 0xFF000000
  3. };
  4. float verts[] = {
  5.     point1.x, point1.y, point2.x, point2.y, point3.x, point3.y
  6. };
  7. canvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.length, verts, 0, null, 0, verticesColors,   0, null, 0, 0, new Paint());
  8.  

or:
Код: [ Загрузить ] [ Скрыть ]
Using Java(TM) 2 Platform Standard Edition 5.0 Syntax Highlighting
  1. private void drawArrows(Point[] point, Canvas canvas, Paint paint) {
  2.  
  3.     float [] points  = new float[8];            
  4.     points[0] = point[0].x;      
  5.     points[1] = point[0].y;      
  6.     points[2] = point[1].x;      
  7.     points[3] = point[1].y;        
  8.     points[4] = point[2].x;      
  9.     points[5] = point[2].y;              
  10.     points[6] = point[0].x;      
  11.     points[7] = point[0].y;
  12.  
  13.     canvas.drawVertices(VertexMode.TRIANGLES, 8, points, 0, null, 0, null, 0, null, 0, 0, paint);
  14.     Path path = new Path();
  15.     path.moveTo(point[0].x , point[0].y);
  16.     path.lineTo(point[1].x,point[1].y);
  17.     path.lineTo(point[2].x,point[2].y);
  18.     canvas.drawPath(path,paint);
  19.  
  20. }
  21.  

_________________
Изображение


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 08 май 2014, 20:16 

Зарегистрирован: 08 май 2014, 20:12
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Помогите исправить код так чтобы фигуры строились по размеру экрана, а не по определенным точкам. Сколько чего не перепробовал ничего не получилось рабочего. Квадрат отказывался прорисовываться.

Можно не весь код переделать, а просто на примере квадрата продемонстрировать(взять размер экрана, разделить на два и получившиеся значения подставить в координаты).


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 06 июн 2014, 15:24 

Зарегистрирован: 06 июн 2014, 15:22
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Присоединяюсь к предыдущему вопросу. Необходимо нарисовать подобие графика, соответственно он должен на всех экранах выглядеть одинаково. Как задать координаты для линии, чтобы она строилась не на пикселах?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 окт 2014, 13:50 
Аватар пользователя

Зарегистрирован: 10 мар 2014, 08:14
Сообщений: 193
Благодарил (а): 18 раз.
Поблагодарили: 10 раз.
Доброго времени суток

А как рисовать рандомное количество фигур, а не фиксированное в методе onDraw?
Или же это по принципу нарисовал фигурку сохранил битмап, загрузил битмап нарисовал другую фигурку и тд?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 29 окт 2014, 17:03 

Зарегистрирован: 10 окт 2013, 16:54
Сообщений: 8
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Доброго времени!

А подскажите как, используя потоковый способ, рисовать "по запросу"?
Нажал кнопку 1 - нарисовал одну группу фигур.
Нажал кнопку 2 - нарисовал другую группу фигур.
И т.д.

Спасибо!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 02 ноя 2014, 12:48 
Аватар пользователя

Зарегистрирован: 10 мар 2014, 08:14
Сообщений: 193
Благодарил (а): 18 раз.
Поблагодарили: 10 раз.
Masi4 писал(а):
Доброго времени!

А подскажите как, используя потоковый способ, рисовать "по запросу"?
Нажал кнопку 1 - нарисовал одну группу фигур.
Нажал кнопку 2 - нарисовал другую группу фигур.
И т.д.

Спасибо!

if или switch


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 03 дек 2014, 23:51 

Зарегистрирован: 18 дек 2013, 14:54
Сообщений: 42
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
А как рисовать пальцем кривую произвольной формы? Про линии и другие графические примитивы было рассказано хорошо.
Как потом это сохранить с тем, чтобы открыть как документ, а не картинку? Можно ли хранить объекты в SQLite? Как? Я умею там хранить только числа и строки.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB