Всем привет, это у нас очередной урок по созданию приложений для операционной системы андроид с помощью среды разработки Android Studio.
Начнем создавать необходимые классы для работы приложения и я вам по ходу дела буду объяснять что к чему!
FingerPath.java
FingerPath.java это простой класс который будет сохранять в себе элементы которые мы будем менять, такие как размер кисточки, цвет и.т.д
import android.graphics.Path;
public class FingerPath
public int color;
public boolean emboss;
public boolean blur;
public int strokeWidth;
public Path path;
public FingerPath(int color, boolean emboss, boolean blur, int strokeWidth, Path path) this.color = color;
this.emboss = emboss;
this.blur = blur;
this.strokeWidth = strokeWidth;
this.path = path;
>
>
PaintView.java
PaintView.java это наше “custom” View. Простыми словами это View которое мы сами создадим. Данный класс и будет являться холстом.Этот класс отвечает за рисование на экране размер холста и многое другое. В данном классе мы также обрабатываем прикосновение пальца к экрану и рисуем согласно координатам полученным от сенсорного экрана.
ТОП 5 ПРОГРАММ ДЛЯ РИСОВАНИЯ МАНГИ И КОМИКСОВ (перезалив)
Источник: neco-desarrollo.es
Создание мобильного приложения для рисования на Android Studio
Или как не сойти с ума в поисках решения простейшей проблемы будучи новичком.
В один ужасный день мой научный руководитель предложил мне поработать над одним проектом. Я не буду вдаваться в подробности, но каркасом для будущего мобильного приложения должно было служить приложение для рисования пальцем на экране смартфона. Я согласился. На следующий день, в поисках решения в русскоязычном сегменте интернета я сдался.
Еще через день, я прибегнул к страшной черной магии. Я загуглил вопрос на английском. И даже в данной среде я нашел лишь небольшое количество информации, но там я встретил своего учителя-ситха. Он научил меня многому, но и многое для создания этого приложения было предпринято мною лично.
Я не думаю, что данную статью будут читать профессиональные разрабы (иначе меня забросают помидорами). Статья в первую очередь нужна для новичков. Здесь не будет глубоких разъяснений почему так или не так. Здесь не будет самописных библиотек или чего-то заумного. Новичкам стоит лишь повторять то что написано в статье как в алгоритме.
Для тех кто хочет видеть это в видео-формате от индуса, в конце статьи будет ссылка. Опытным Джавистам и разрабам на Андроид Студио — большое спасибо что уделяете внимание новичкам, будем благодарны за помощь и совет.
Рисовать аниме проще, чем ты думаешь
Для начала о ресурсах которые мы будем использовать. Наш друг из Индии любезно заготовил нам пару картинок в .xml формате и дал на них ссылку под видео, оригинальная ссылка на его гугл диск работать перестала, поэтому для вас будет его копия.
https://drive.google.com/drive/folders/1lv3pwm4YSr1q-LdTnvdQSvCvWImRg7ow?usp=sharing
Далее-библиотеки. Нам нужны библиотеки:
- SignatureView, которая собственно и будет позволять нам рисовать на экране https://github.com/zahid-ali-shah/SignatureView
- AmbilWarna для выбора цвета нашей «ручки».
https://github.com/yukuku/ambilwarna Наш азиатский друг эту тему не затрагивал, но есть некоторые сложности с их подключением, о которых речь пойдет далее.
В основном алгоритм их подключения и не сильно от остальных отличается. Берем те зависимости которые указаны в описании библиотеки на гитхабе, в нашем случае это зависимости: ‘com.github.yukuku:ambilwarna:2.0.1’ и ‘com.kyanogen.signatureview:signature-view:1.2’. Заходим в Андроид студио, во ВТОРОЙ файл build.grandle(Module :app) и при помощи «implementation» вписываем две эти зависимости в dependencies.
Но, как и в анекдоте про Чапая и Петьку, есть нюанс. Библиотека SignatureView так просто не заработает. Заходим в файл settings.grandle и, первое, дописываем в repositiories jcenter(), второе, в конце файла приписываем include ‘SignatureView-Example’, ‘signature-view’
(Только что вы сделали за пару минут то, что мой хилый мозг придумывал пол для.) После чего, мы все это дело синхронизируем, при помощи кнопки «Sync now» в правом верхнем углу. Ура, библиотеки подключены!
Теперь к объектам на сцене. Можете забить на режим дизайна, сразу переключайтесь либо в сплит (чтобы сразу видеть что меняется на сцене), либо в режим кода. Удаляйте TextView и замените те страшные строчки в самом первом объекте на Relative Layout.
Возвращаемся к нашему SignatureView на гитхабе и копируем следующие строки, вставляем в пространство между RelativeLayout:
Уже этот кусок кода позволит нам рисовать на экране.
Отвлечемся на секунду для того, чтобы закинуть ассеты картинок. В папку drawable, что находится в папке res, закидываем наши скачанные ассеты. Готово, теперь в ресурсах будут отображаться 2 эти картинки.
Обратно к Xml. Теперь надо сделать панельку с кнопками и другими управляющими элементами. Для этого будем использовать:
- Слайдер для увеличения/уменьшения кисти
- 2 кнопки. Одна меняет цвет нашей кисти, вторая стирает все что было нарисовано.
Создаем LinearLayout со следующими параметрами:
и еще 2 внутри него с:
android_layout_width=»match_parent» android_layout_height=»wrap_content» android_layout_weight=»1″ android_layout_margin=»4dp» //для первого
android_layout_gravity=»end» android_layout_width=»match_parent» android_layout_height=»wrap_content» android_layout_weight=»1″ android_layout_margin=»4dp» //для второго
Самый главный Linear нам нужен для того чтобы обернуть в него 2 другие. Первый будет содержать слайдер, второй — 2 кнопки.
Переключаем все внимание на первый внутренний Linear. В нем надо создать SeekBar и TextView. Итоговый вариант первого внутреннего Linear’a:
При работе в режиме сплит вы увидите следующее:
Ко второму Linear’у. Создаем 2 ImageButton, со следующими параметрами. Для первого:
Итоговый вариант Xml кода:
Сам интерфейс программы будет таким:
Ура, мы закончили с интерфейсом! Устали? Я тоже, но осталось чуть-чуть (нет).
Теперь к любимой части, java коду.
Для начала импорт необходимого всего(библиотек):
import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import android.os.Bundle; import android.view.View; import android.widget.ImageButton; import android.widget.SeekBar; import android.widget.TextView; import com.kyanogen.signatureview.SignatureView; import yuku.ambilwarna.AmbilWarnaDialog;
Теперь объявляем все переменные, необходимые нам:
SignatureView signatureView;// объект для того чтобы рисовать ImageButton imgEraser,imgColor;// 2 объекта кнопок SeekBar seekBar;// слайдбар для изменения размера ручки TextView txtpensize;// текст для пояснения int defaultcolor;// стандартный цвет который мы используем на данный момент
Ну а теперь крепим все это к объектам из .XML, через ID-шников, которые мы им уже дали в коде XML
signatureView=findViewById(R.id.signature_view);//метод findViewById делает возможным поиск по айди элемента в XML imgEraser=findViewById(R.id.btnEraser); imgColor= findViewById(R.id.btnColor); seekBar=findViewById(R.id.penSize); txtpensize=findViewById(R.id.TxtPenSize); defaultcolor= ContextCompat.getColor(MainActivity.this,R.color.black);//просто черный цвет
Далее к основному коду. Для начала Seek Bar. Обращаемся к seekBar.setOnSeekBarChangeListener и видим следующую картину:
Здесь нам нужена только функция onProgressChanged, где мы пишем следующие строки:
txtpensize.setText(progress+»dp»);//то что мы будем видеть как подсказку signatureView.setPenSize(progress);//смена размера кисти через функции библиотеки seekBar.setMax(50);//максимальное значение seekbara
Далее кнопка для стирания всего с экрана. Для этого обращаемся к imgEraser.setOnClickListener, а точнее к функции внутри него — public void onClick(View v) после чего пишем- signatureView.clearCanvas();. По итогу мы получим:
Теперь к смене цвета. Для начала, за пределами функции OnCreate, создаем функцию openColorPicker. Создаем там новый AmbilWarnaDialog:
AmbilWarnaDialog ambilWarnaDialog = new AmbilWarnaDialog(this, defaultcolor, new AmbilWarnaDialog.OnAmbilWarnaListener()
Дополняем все это безобразие следующими строками:
Теперь вернемся к функции OnCreate и дополняем его следующими строками для вызовы данной функции и смены цвета:
Ура! Вы сделали приложение для простейшего рисования для андроид устройств (меня наконец-то покормят!). Осталось только скомпилировать код и установить на любое андроид устройство.
Извиняюсь за ублюдский шортс, ютуб не дает сохранить видео не в формате шортс(:). На моей демонстрации черный цвет из-за темы телефона (инверсия цветов), на ваших устройствах все будет ОК.
Источник: temofeev.ru
Библиотека Tkinter: Разработка программы Paint
В этой статье мы разработаем простую «рисовалку» на Python. Программа будет примитивная, но мы потренируемся в создании макетов компоновки в tkinter, передаче аргументов в функцию-обработчик, а также применим анонимные функции.
Класс Paint
В нашей программе мы будем применять ООП и поэтому создаем класс и называем его «Paint». Листинг:
from tkinter import * from tkinter.messagebox import * # класс Paint class Paint(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent # выход из программы def close_win(): if askyesno(«Выход», «Вы уверены?»): root.destroy() # вывод справки def about(): showinfo(«Demo Paint», «Простейшая рисовалка от сайта: https://it-black.ru») # функция для создания главного окна def main(): global root root = Tk() root.geometry(«800×600+300+300″) app = Paint(root) m = Menu(root) root.config(menu=m) fm = Menu(m) m.add_cascade(label=»Файл», menu=fm) fm.add_command(label=»Выход», command=close_win) hm = Menu(m) m.add_cascade(label=»Справка», menu=hm) hm.add_command(label=»О программе», command=about) root.mainloop() if __name__ == «__main__»: main()