Пишем код в Android Studio на Kotlin
Писать приложения для Android можно не только в среде разработки Processing, но и в Android Studio. При этом никто не мешает вам использовать язык Kotlin вместо Java.
Эта статья больше подойдёт тем, кто уже использует Android Studio и просто захочет побаловаться Processing.
Для начала нужно установит библиотеку. Я пробовал устанавливать через Gradle стандартным способом, чтобы библиотека подтягивалась через интернет. К сожалению, при таком способе возникала ошибка. Мы пойдём другим путём. Заходим на страницу https://github.com/processing/processing-android/releases и скачиваем файл AndroidMode.zip.
Внутри архива есть файл processing-core.zip, которому следует поменять расширение на jar и поместить в папку libs вашего модуля. Для удобства переключитесь в режим Project, чтобы увидеть эту папку в студии.
Создайте активность обычным способом с помощью мастера. При выборе шаблона укажите на желание использовать Kotlin.
Само рисование происходит на холсте, но нам нужно сначала указать, какой элемент послужит нам холстом. Я выбрал вариант FrameLayout, который поместил в ConstraintLayout.
Файл res/layout/activity_kotlin.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="ru.alexanderklimov.helloworld.KotlinActivity">
<FrameLayout
android:id="@+id/canvas_container"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
</android.support.constraint.ConstraintLayout>
Теперь откроем файл класса активности и напишем код для рисования фигур.
package ru.alexanderklimov.helloworld
import android.graphics.Color
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_kotlin.*
import processing.android.PFragment
import processing.core.PApplet
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin)
val myCanvas = object : PApplet() {
override fun settings() {
fullScreen()
}
override fun setup() {
// Фон
background(Color.parseColor("#FF8A80"))
}
override fun draw() {
super.draw()
// Находим центр
val centerX = width / 2
val centerY = height / 2
stroke(Color.BLACK) // обводка
fill(Color.MAGENTA) // заливка
rect((centerX / 2).toFloat(), 100f, 500f, 300f)
ellipse(centerX.toFloat(), 650f, 500f, 400f)
rect(100f, 900f, 500f, 300f, 100f)
stroke(Color.GREEN)
fill(Color.BLUE)
triangle(120f, 1600f, 300f, 1300f, 500f, 1600f)
}
}
// Помещаем холст в фрагмент
val myFragment = PFragment(myCanvas)
// Выводим фрагмент
myFragment.setView(canvas_container, this)
}
}
Холст создаётся на основе PApplet. В функции settings() устанавливаем полноэкранный режим. В функции инициализации setup() устанавливаем фон, а в функции draw() рисуем необходимые фигуры.
Сам холст нужно добавить в фрагмент. Запускаем приложение и видим результат.
Если хотим добавить поддержку касаний экрана, то перепишем код в функции draw():
override fun draw() {
if (mousePressed) {
ellipse(mouseX.toFloat(), mouseY.toFloat(), 50F, 50F);
}
}
При движении пальца по экрану рисуется множество овалов. Результат.
В сети нашёл красивый пример, использующий массив пикселей для рисования красивой картинки.
override fun draw() {
loadPixels() // Load array
// loop through all valid coordinates
for(y in 0..height - 1) {
for(x in 0..width - 1) {
// Calculate index
val index = x + y * width
// Update pixel at index with a new color
pixels[index] = Color.rgb(x % 255, y % 255, (x*y) % 255)
}
}
// Render pixels with new colors
updatePixels()
}
Результат.