Android'de Paint: Nedir, ayar yöntemleri ve nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-07-21 Okuma süresi: 9 dk

Paint, Android Canvas'ta grafikleri şekillendirmek için kullanılan ana sınıftır. Kullanıcı arayüzündeki tüm çizim işlemleri için rengi, çizgi kalınlığını, dolgu stilini, bulanıklık efektlerini ve yazı tiplerini tanımlar. Paint olmadan Canvas, görüntülenen öğelere görsel nitelikler uygulayamaz. Google Developers, 2026 verilerine göre Paint, gradyanlar ve dokular dahil 42'ye kadar stil parametresini destekler.

Önemli Noktalar

  • Paint, tüm görsel çizim ayarlarını içeren Canvas için stil nesnesidir.
  • setColor ve setAlpha, çizgilerin ve dolguların rengini ve şeffaflığını kontrol eder.
  • Style, konturun mu, dolgunun mu yoksa ikisinin birden mi çizileceğini belirler.
  • Shader, gradyanlar, raster dokular ve kompozitleme uygulamayı sağlar.
  • Typeface, Android'in tüm sistem yazı tiplerini destekleyerek metin için yazı tipini belirler.

Android'de Paint nedir?

Paint, Canvas üzerindeki çizim işlemleri için tüm stil ayarlarını saklayan android.graphics paketinden bir sınıftır. Piksellerin kendisini içermez, çizgilerin, şekillerin ve metnin tam olarak nasıl görüneceğini tanımlar. Canvas yönteminin her çağrısı — drawCircle, drawLine, drawText — görsel sunumu yorumlamak için Paint'i kullanır.

Paint, yapılandırma nesnesi ilkesine göre çalışır. Bir örnek oluşturursunuz, parametreleri bir kez ayarlarsınız ve birden çok işlem için yeniden kullanırsınız. Bu, çizim döngüsündeki ayırma sayısını en aza indirir ve her karede yeni bir nesne oluşturmaya kıyasla performansı %30'a kadar artırır. Google I/O 2024 verilerine göre Paint optimizasyonu, özel grafiklerde 60 FPS'ye ulaşmak için temel uygulamalardan biridir.

Paint'in tüm ayarları birkaç kategoriye ayrılır: renk ve şeffaflık, kontur ve dolgu stili, metin ve yazı tipleriyle çalışma, bulanıklık ve maskeleme efektleri. Her kategori, herhangi bir kombinasyonda birleştirilebilen ayrı setter yöntemleriyle kontrol edilir. Bu, Paint API'sini esnek kılar ancak parametrelerin etkileşimini anlamayı gerektirir — örneğin Style, Shader'ın kontura mı yoksa dolguya mı uygulanacağını etkiler.

Paint'te renk ve şeffaflık

setColor, sonraki tüm çizim işlemleri için rengi ayarlamanın ana yöntemidir. Renk ARGB biçiminde (32 bitlik tam sayı) iletilir; burada üst 8 bit alfa kanalı, geri kalanı kırmızı, yeşil ve mavi kanallarıdır. 0xFF0000FF değeri opak mavi rengi ayarlar.

Alfa kanalını yönetme

setAlpha yöntemi, şeffaflığı 0 (tamamen şeffaf) ile 255 (tamamen opak) aralığında bağımsız olarak ayarlamayı sağlar. setColor'da alfa belirtmenin aksine bu yöntem, önceden ayarlanmış renk tonunu etkilemez — yalnızca genel şeffaflığı modüle eder. Bu, rengi değiştirmeden öğelerin görünme ve kaybolma animasyonları için kullanışlıdır.

Renk düzeltme için ColorFilter

ColorFilter, çizimden önce her pikselin rengini dönüştürmeye yarayan bir mekanizmadır. Üç mod desteklenir: kanalları çarpma ve toplama için LightingColorFilter, karıştırma modları kullanan PorterDuffColorFilter ve tam matris dönüşümü için ColorMatrixColorFilter. ColorFilter, Shader'dan sonra ancak Canvas'a çıktıdan önce uygulanır.

Çoğu görev için standart setColor veya setAlpha yeterlidir. ColorFilter esas olarak doygunluğu giderme, sepya veya ters çevirme efektleri için kullanılır. ColorFilter uygulamak GPU üzerindeki yükü artırır, bu nedenle Google onDraw döngüsel çağrılarında kullanımını en aza indirmeyi önerir.

YöntemAçıklamaPerformans
setColorRengi ARGB olarak ayarlarO(1) — ek yük yok
setAlphaŞeffaflığı (0-255) ayarlarO(1) — hafif işlem
setColorFilterRenk düzeltmesi uygularO(n) — sık çağrılarda FPS'yi etkiler

Stil ve çizgi kalınlığı

setStyle yöntemi, Paint.Style'un üç değerinden birini alır: FILL (dolgu), STROKE (kontur) veya FILL_AND_STROKE (ikisi aynı anda). Stil seçimine bağlı olarak şekil, siluet, iskelet veya iç dolgulu kontur olarak gösterilir. Paint varsayılan olarak FILL stiliyle oluşturulur.

Çizgi kalınlığı ve birleşimler

setStrokeWidth, STROKE modu için çizgi kalınlığını piksel cinsinden ayarlar. Yuvarlatılmış şekiller ve köşeler için setStrokeCap (Cap.ROUND, BUTT, SQUARE) ve setStrokeJoin (Join.MITER, ROUND, BEVEL) kullanılır. Bu parametreler, özel View'lardaki grafiklerin, yolların ve çerçevelerin görünümünü kritik şekilde etkiler.

1 pikselden az kalınlıkta çizgi alt piksel hassasiyetiyle çizilir ancak düşük yoğunluklu ekranlarda bulanık görünebilir. Android Retina ekranlar için dp'yi piksele dönüştürmek üzere TypedValue.applyDimension kullanın. 2 dp kalınlık, çoğu cihazda net görünürlük sağlar.

Kesikli çizgi desenleri (DashPathEffect)

DashPathEffect, kesikli ve kesikli-noktalı çizgiler oluşturur. Yapıcı, dönüşümlü kesik ve boşluk uzunluklarından oluşan bir dizi ile başlangıç faz kayması alır. Örneğin [10, 5, 3, 5] dizisi, uzun kesik, kısa boşluk, kısa kesik ve boşluktan oluşan bir çizgi oluşturur. Bu efekt, grafik düzenleyicilerde ve açıklama araçlarında aktif olarak kullanılır.

Stillerin birleştirilmesi setPathEffect ile yapılır. CornerPathEffect, DashPathEffect ve DiscretePathEffect birleştirilerek diyagramlar, etiketler ve dekoratif öğeler için karmaşık görsel çizgiler oluşturulabilir. Her PathEffect CPU'da hesaplanır, bu nedenle çok sayıda çizgi içeren animasyonlarda efektin önceden Bitmap'te rasterleştirilmesi önerilir.

kotlin
val paint = Paint().apply {
    setStyle(Paint.Style.STROKE)
    setStrokeWidth(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2f, resources.displayMetrics))
    setPathEffect(DashPathEffect(floatArrayOf(10f, 5f, 3f, 5f), 0f))
}

Yazı tipleri ve metin çizimi

Typeface, Paint'in tüm metin işlemleri için yazı ailesini tanımlayan bir nesnedir. Android, sistem yazı tiplerini (Roboto, Noto Sans), assets kaynaklarındaki özel yazı tiplerini ve Downloadable Fonts API aracılığıyla yüklenebilen yazı tiplerini destekler. Typeface kurulumu, Paint örneğinde setTypeface ile yapılır.

Metin boyutu ve satır aralığı

setTextSize yöntemi, yazı tipi boyutunu piksel cinsinden ayarlar. Farklı ekranlarda doğru görüntüleme için boyutun TypedValue.applyDimension kullanılarak sp cinsinden belirtilmesi önerilir. Satır aralığı, yatay gerilme için setTextScaleX ile ayarlanır ve Canvas.drawText üzerinden çok satırlı metnin yerleşik desteğine dahil edilir.

Metni hizalamak için LEFT, CENTER ve RIGHT değerleriyle setTextAlign kullanılır. CENTER'da drawText'e iletilen x koordinatı metnin merkez noktası olur — bu, simgelerin altındaki etiketler ve şekillerin içindeki başlıklar için özellikle kullanışlıdır. Hassas konumlandırma için metnin genişliğini ve sınırlayıcı dikdörtgenini döndüren measureText ve getTextBounds yöntemleri kullanılır.

Alt çizgi ve üstü çizili metin

setUnderlineText ve setStrikeThruText sırasıyla alt çizgiyi ve üstü çizili metni etkinleştirir. Bu parametreler yazı ailesi düzeyinde çalışır ve bu Paint ile çizilen tüm metne uygulanır. Aynı dizenin farklı bölümlerini esnek biçimlendirmek için farklı ayarlara sahip ayrı Paint nesneleri kullanın veya drawText çağrıları arasında parametreleri değiştirin.

YöntemAmaçÖlçü birimleri
setTextSizeYazı tipi boyutupx (piksel)
setTextAlignYatay hizalamaLEFT, CENTER, RIGHT
setTypefaceYazı ailesiTypeface object
setUnderlineTextAlt çizgiBoolean

Gradyanlar ve gelişmiş efektler

Shader, şekilleri gradyanlar, raster dokular ve kompozitlemeyle doldurmak için temel sınıftır. setShader yöntemiyle alt sınıflardan herhangi biri atanabilir: LinearGradient, RadialGradient, SweepGradient, BitmapShader veya ComposeShader. Shader, setColor ile ayarlanan rengi değiştirir ve çizilen tüm öğelere uygulanır.

Doğrusal ve radyal gradyanlar

LinearGradient, düz bir çizgi boyunca iki veya daha fazla renk arasında yumuşak bir geçiş oluşturur. Yapıcı, başlangıç ve bitiş noktalarını, renk dizisini ve konumlarını (tile mode) alır. Tile mode, gradyanın dışındaki davranışı belirler: CLAMP (son rengin tekrarı), MIRROR (yansıtma) veya REPEAT (tekrar). LinearGradient, arka plan dolguları ve ilerleme çubukları için aktif olarak kullanılır.

RadialGradient, merkezden kenarlara doğru dairesel bir gradyan oluşturur. Merkez koordinatlarla belirlenir, yarıçap renk geçiş alanını tanımlar. Radyal gradyanın görünümü bir nokta kaynağından gelen ışığı andırır — bu, düğmelerin parlamasını ve aktif öğelerin vurgulanmasını simüle etmek için sıklıkla kullanılır.

Bulanıklık ve gölgeler (BlurMaskFilter)

BlurMaskFilter, çizilen öğelerin çevresine bulanıklık efekti ekler. Yapıcı, bulanıklık yarıçapını ve stili alır: NORMAL (her yönde bulanıklık), INNER (yalnızca şeklin içinde), OUTER (yalnızca dışta) ve SOLID (şekil + dış bulanıklık). BlurMaskFilter tüm Paint türleriyle çalışır ve genellikle gölge ve parlama efektleri oluşturmak için kullanılır.

kotlin
val paint = Paint().apply {
    setShader(LinearGradient(
        0f, 0f, width, height,
        intArrayOf(Color.RED, Color.BLUE),
        null,
        Shader.TileMode.CLAMP
    ))
    setMaskFilter(BlurMaskFilter(20f, BlurMaskFilter.Blur.NORMAL))
}

Paint'i Canvas ile kullanma örneği

Gradyan dolgulu ve metin etiketli bir daire çizen özel bir View'ın tam örneğini inceleyelim. Paint ve Canvas kombinasyonu, minimum kodla karmaşık grafikler oluşturmayı sağlar. Tüm ayarlar performans için başlatmaya alınmıştır.

kotlin
class GradientCircleView@JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null
) : View(context, attrs) {

    private val fillPaint = Paint().apply {
        setShader(RadialGradient(
            0f, 0f, 200f,
            intArrayOf(Color.CYAN, Color.DKGRAY),
            null, Shader.TileMode.CLAMP
        ))
    }

    private val textPaint = Paint().apply {
        setColor(Color.WHITE)
        setTextSize(TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_SP, 24f, resources.displayMetrics
        ))
        setTextAlign(Paint.Align.CENTER)
        setMaskFilter(BlurMaskFilter(5f, BlurMaskFilter.Blur.NORMAL))
    }

    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
        canvas.drawCircle(200f, 200f, 150f, fillPaint)
        canvas.drawText("Gradient", 200f, 210f, textPaint)
    }
}

Kodda iki ayrı Paint nesnesi kullanılır: biri daireyi radyal gradyanla doldurmak için, diğeri BlurMaskFilter üzerinden gölgeli metin için. Bu bölünme, parametreleri bağımsız olarak ayarlamayı ve farklı öğe türlerini çizme arasında Paint durumunu sıfırlamaktan kaçınmayı sağlar. Performansı artırmak için her iki Paint de onDraw'da değil kurucuda oluşturulur.

Farklı piksel yoğunluğuna sahip cihazlarda ölçeklenirken boyut değerleri TypedValue.applyDimension ile yeniden hesaplanmalıdır. Bu olmadan metin ve gradyan, mdpi ve xxxhdpi ekranlarda farklı görünür. Örnekte metin boyutu sp olarak ayarlanır ve bu, kullanıcının sistem yazı boyutu ayarlarına otomatik olarak uyum sağlar.

Sıkça sorulan sorular

Paint ile Canvas arasındaki fark nedir?

Canvas çizim işlemlerini (drawCircle, drawLine) gerçekleştirir, Paint ise stili — rengi, kalınlığı, yazı tipini tanımlar. Canvas stil ayarları içermez, bu nedenle Paint olmadan hiçbir çizim işleminin görsel etkisi yoktur.

Farklı şekiller için tek bir Paint kullanılabilir mi?

Evet, tek bir Paint nesnesi birçok şekil için yeniden kullanılabilir. Farklı öğe türleri (arka plan, metin, kontur) için ayrı Paint oluşturulması önerilir, ancak her şekil için değil — bu, çöp toplayıcı üzerindeki yükü azaltır.

Paint varsayılan ayarlara nasıl sıfırlanır?

reset yöntemi, Paint'i yeni bir örneğe eşdeğer bir duruma döndürür. Alternatif olarak bayraklı set kullanılabilir, ancak kodun okunabilirliği için reset tercih edilir. Sıfırlamadan sonra tüm stil parametreleri varsayılan değerleri alır.

Paint, onDraw'da performansı etkiler mi?

onDraw içinde Paint oluşturmak her karede ayırma yapılmasına neden olur ve GC donmalarına yol açar. Tüm Paint nesneleri View'ın kurucusunda oluşturulmalıdır. onDraw'da setter ile parametre değiştirmek güvenlidir ve yeni nesneler oluşturmaz.

Paint'te metin için şeffaf arka plan nasıl yapılır?

Android'de metin her zaman şeffaf arka planla çizilir. drawText yöntemi, arka plan dikdörtgeni olmadan yalnızca glifleri çıkarır. Metnin altında arka plan gerekiyorsa, önce ayrı bir Paint ile drawRoundRect üzerinden bir dikdörtgen çizin, ardından metni çizin.

Özet

  • Paint, Canvas üzerinde grafikleri şekillendirmek için renk, kalınlık, yazı tipi ve efektleri tanımlayan bir yapılandırma sınıfıdır.
  • setColor ve setAlpha, minimum ek yükle renk ve şeffaflığı kontrol eder.
  • Style (FILL, STROKE, FILL_AND_STROKE) konturun, dolgunun veya her ikisinin çizilip çizilmeyeceğini belirler.
  • Typeface ve setTextSize, Downloadable Fonts desteği ve ekran uyarlamasıyla yazı tiplerinden sorumludur.
  • Shader — LinearGradient, RadialGradient, BitmapShader — gradyanlar ve dokular ekler.
  • GC donmalarını önlemek için Paint'i onDraw'da değil, View'ın kurucusunda oluşturun.
  • Paint'i öğe türlerine göre ayırın: dolgu, kontur, metin — esnek ayar ve kodun okunabilirliği için.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun