package com.example.kliker_xml
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.os.Bundle
import android.widget.ImageView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class MainActivity : AppCompatActivity() {
private lateinit var bitmap: Bitmap
private lateinit var canvas: Canvas
private lateinit var paint: Paint
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// metoda statyczna, która tworzy nową instancję obiektu Bitmap.
// parametry:
// szerokość i wysokość bitmapy
// ARGB_8888 oznacza, że każdy piksel jest reprezentowany przez 4 składowe kolorów:
// Alfa (A) - przezroczystość, Czerwony (R), Zielony (G), i Niebieski (B),
// z każdym składnikiem zajmującym 8 bitów (czyli wartości od 0 do 255).
bitmap = Bitmap.createBitmap(200, 300, Bitmap.Config.ARGB_8888)
// tworzenie kanwy
canvas = Canvas(bitmap)
// referencja do imageView
val imageView = findViewById<ImageView>(R.id.imageView)
// Inicjalizacja farby
paint = Paint().apply {
isAntiAlias = true
color = Color.RED // Domyślny kolor owalu
}
// Rysowanie owalu na kanwie
drawOval()
// Ustaw bitmapę w ImageView
imageView.setImageBitmap(bitmap)
// Obsługa kliknięcia na ImageView
imageView.setOnClickListener {
changeColor(imageView) // Zmiana koloru owalu
}
}
private fun drawOval() {
// Rysowanie owalu na kanwie
canvas.drawColor(Color.TRANSPARENT) // Wyczyszczenie bitmapy przed rysowaniem
canvas.drawOval(0f, 0f, bitmap.width.toFloat(), bitmap.height.toFloat(), paint)
}
private fun changeColor(imageView: ImageView) {
// Generowanie losowego koloru RGB
val randomColor = Color.argb(
255,
(0..255).random(),
(0..255).random(),
(0..255).random()
)
paint.color = randomColor // Ustawienie nowego koloru
drawOval() // Ponowne rysowanie owalu z nowym kolorem
imageView.setImageBitmap(bitmap) // Ustawienie zaktualizowanej bitmapy
}
}