Android-də Paint: nədir, konfiqurasiya metodları və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-07-21 Oxuma vaxtı: 9 dəq

Paint — Android Canvas-da qrafikanın stilizasiyası üçün əsas sinif. O, istifadəçi interfeysindəki bütün rəsm əməliyyatları üçün rəng, xətt qalınlığı, doldurma stili, bulanıqlıq effektləri və şriftləri müəyyən edir. Paint olmadan Canvas göstərilən elementlərə vizual atributları tətbiq edə bilməz. Google Developers, 2026-ya görə, Paint qradientlər və teksturalar da daxil olmaqla 42 stil parametrini dəstəkləyir.

Əsas məqamlar

  • Paint — Canvas üçün bütün vizual rəsm parametrlərini ehtiva edən stilizasiya obyekti.
  • setColorsetAlpha xətlərin və doldurmaların rəngini və şəffaflığını idarə edir.
  • Style konturun, doldurmanın və ya hər iki variantın eyni anda çəkilib-çəkilmədiyini müəyyən edir.
  • Shader qradientlər, bitmap teksturaları və kompozitlər tətbiq etməyə imkan verir.
  • Typeface bütün Android sistem şriftləri dəstəyi ilə mətn üçün şrift təyin edir.

Android-də Paint nədir?

Paint — android.graphics paketindən olan, Canvas-da rəsm əməliyyatları üçün bütün stil parametrlərini saxlayan sinif. O, piksellərin özünü ehtiva etmir, lakin xətlərin, fiqurların və mətnin necə görünəcəyini müəyyən edir. Canvas metodlarının hər çağırışı — drawCircle, drawLine, drawText — vizual təqdimatın interpretasiyası üçün Paint-dən istifadə edir.

Paint konfiqurasiya obyekti prinsipi ilə işləyir. Siz nümunə yaradır, parametrləri bir dəfə təyin edir və onu çoxsaylı əməliyyatlar üçün təkrar istifadə edirsiniz. Bu, çəkmə dövrəsində ayırmaların sayını minimuma endirir və hər kadrda yeni obyekt yaratmaqla müqayisədə performansı 30%-ə qədər artırır. Google I/O 2024-ə görə, Paint optimallaşdırması xüsusi qrafikada 60 FPS-ə çatmaq üçün əsas təcrübələrdən biridir.

Bütün Paint parametrləri bir neçə kateqoriyaya bölünür: rəng və şəffaflıq, kontur və doldurma stili, mətn və şriftlərlə iş, bulanıqlıq və maskalama effektləri. Hər kateqoriya istənilən kombinasiyada birləşdirilə bilən ayrı-ayrı setter metodları ilə idarə olunur. Bu, Paint API-ni çevik edir, lakin parametrlərin qarşılıqlı təsirini başa düşməyi tələb edir — məsələn, Style Shader-in kontura və ya doldurmaya tətbiq olunmasına təsir edir.

Paint-də rəng və şəffaflıq

setColor — bütün sonrakı rəsm əməliyyatları üçün rəng təyin etməyin əsas metodu. Rəng ARGB formatında (32-bit tam ədəd) ötürülür, burada yuxarı 8 bit alfa kanalı, qalanları isə qırmızı, yaşıl və mavi kanallardır. 0xFF0000FF dəyəri qeyri-şəffaf mavi rəng təyin edir.

Alfa kanalının idarə edilməsi

setAlpha metodu 0 (tam şəffaf) ilə 255 (tam qeyri-şəffaf) aralığında şəffaflığı müstəqil tənzimləməyə imkan verir. setColor-da alfa təyin etməkdən fərqli olaraq, bu metod artıq təyin edilmiş rəng tonuna təsir etmir — o, yalnız ümumi şəffaflığı modullaşdırır. Bu, rəng dəyişmədən elementlərin görünmə və yox olma animasiyaları üçün əlverişlidir.

Rəng korreksiyası üçün ColorFilter

ColorFilter — çəkmədən əvvəl hər pikselin rənginin transformasiya mexanizmi. Üç rejim dəstəklənir: kanalların vurulması və toplanması üçün LightingColorFilter, qarışdırma rejimləri ilə üst-üstə qoyma üçün PorterDuffColorFilter və tam matris transformasiyası üçün ColorMatrixColorFilter. ColorFilter Shader-dən sonra, lakin Canvas-a çıxışdan əvvəl tətbiq olunur.

Əksər tapşırıqlar üçün standart setColor və ya setAlpha kifayətdir. ColorFilter əsasən rəngsizləşdirmə, sepya və ya inversiya effektləri üçün istifadə olunur. ColorFilter tətbiqi GPU yükünü artırır, buna görə Google onun onDraw dövri çağırışlarında istifadəsini minimuma endirməyi tövsiyə edir.

MetodTəsvirPerformans
setColorARGB-də rəng təyin edirO(1) — əlavə yük yoxdur
setAlphaŞəffaflığı tənzimləyir (0-255)O(1) — yüngül əməliyyat
setColorFilterRəng korreksiyası tətbiq edirO(n) — tez-tez çağırışlarda FPS-ə təsir edir

Xətt stili və qalınlığı

setStyle metodu Paint.Style-in üç dəyərindən birini qəbul edir: FILL (doldurma), STROKE (kontur) və ya FILL_AND_STROKE (eyni anda). Stil seçimindən asılı olaraq, fiqurun siluet, çərçivə və ya daxili doldurma ilə kontur kimi göstəriləcəyi müəyyən olunur. Paint standart olaraq FILL stili ilə yaradılır.

Xətt qalınlığı və birləşmələr

setStrokeWidth STROKE rejimi üçün xətt qalınlığını piksellə təyin edir. Dairəvi fiqurlar və yuvarlaq künclər üçün setStrokeCap (Cap.ROUND, BUTT, SQUARE) və setStrokeJoin (Join.MITER, ROUND, BEVEL) istifadə olunur. Bu parametrlər xüsusi View-lərdə qrafiklərin, yolların və çərçivələrin görünüşünə kritik təsir göstərir.

1 pikseldən az qalınlıqda xətt subpiksellə dəqiqliklə çəkilir, lakin aşağı sıxlıqlı ekranlarda bulanıq görünə bilər. Android Retina displeyləri üçün dp-ni piksellərə çevirmək üçün TypedValue.applyDimension istifadə edin. 2 dp qalınlıq əksər cihazlarda aydın görünürlük təmin edir.

Kəsmə naxışları (DashPathEffect)

DashPathEffect nöqtəli və tireli xətlər yaradır. Konstruktor növbəli tire və boşluqların uzunluqları massivini və ilkin faza sürüşməsini qəbul edir. Məsələn, [10, 5, 3, 5] massivi uzun tire, qısa boşluq, qısa tire və boşluq olan xətt yaradır. Bu effekt qrafik redaktorlarda və annotasiya alətlərində fəal şəkildə istifadə olunur.

Stil birləşməsi setPathEffect vasitəsilə həyata keçirilir. CornerPathEffect, DashPathEffect və DiscretePathEffect-i birləşdirərək diaqramlar, izahlar və dekorativ elementlər üçün mürəkkəb vizual xətlər yaratmaq olar. Hər PathEffect CPU-da hesablanır, buna görə çox sayda xətti olan animasiyalarda effekti əvvəlcədən Bitmap-a rasterləşdirmək tövsiyə olunur.

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))
}

Şriftlər və mətnin çəkilməsi

Typeface — Paint-in bütün mətn əməliyyatları üçün şrifti müəyyən edən obyekt. Android sistem şriftlərini (Roboto, Noto Sans), assets resurslarından xüsusi şriftləri və Downloadable Fonts API vasitəsilə yüklənən şriftləri dəstəkləyir. Typeface setTypeface vasitəsilə Paint nümunəsində təyin edilir.

Mətn ölçüsü və sətirarası məsafə

setTextSize metodu şrift ölçüsünü piksellə təyin edir. Müxtəlif ekranlarda düzgün göstərilmə üçün TypedValue.applyDimension ilə ölçünü sp-də göstərmək tövsiyə olunur. Sətirarası məsafə üfüqi uzatma üçün setTextScaleX ilə tənzimlənir və Canvas.drawText vasitəsilə MultiLine mətnin daxili dəstəyinə daxildir.

Mətnin düzləndirilməsi üçün LEFT, CENTER və RIGHT dəyərləri ilə setTextAlign istifadə olunur. CENTER-də drawText-ə ötürülən x koordinatı mətnin mərkəz nöqtəsinə çevrilir — bu, ikonlar altındakı izahlar və fiqurlar daxilindəki başlıqlar üçün xüsusilə əlverişlidir. Dəqiq yerləşdirmə üçün mətnin enini və sərhəd düzbucaqlısını qaytaran measureText və getTextBounds metodları tətbiq olunur.

Alt xətt və üstündən xətt çəkmə

setUnderlineTextsetStrikeThruText müvafiq olaraq alt xətt və üstündən xətt çəkməni aktivləşdirir. Bu parametrlər şrift səviyyəsində işləyir və verilən Paint ilə çəkilən bütün mətnə tətbiq olunur. Bir sətrin müxtəlif hissələrini çevik formatlaşdırmaq üçün fərqli parametrlərlə ayrıca Paint obyektlərindən istifadə edin və ya drawText çağırışları arasında parametrləri dəyişdirin.

MetodMəqsədÖlçü vahidləri
setTextSizeŞrift ölçüsüpx (piksellər)
setTextAlignÜfüqi düzləndirməLEFT, CENTER, RIGHT
setTypefaceŞriftTypeface object
setUnderlineTextAlt xəttBoolean

Qradientlər və qabaqcıl effektlər

Shader — fiqurları qradientlər, bitmap teksturaları və kompozitlərlə doldurmaq üçün əsas sinif. setShader metodu vasitəsilə alt siniflərdən hər hansı birini təyin etmək olar: LinearGradient, RadialGradient, SweepGradient, BitmapShader və ya ComposeShader. Shader setColor ilə təyin edilmiş rəngi əvəz edir və bütün çəkilən elementlərə tətbiq olunur.

Xətti və radial qradientlər

LinearGradient düz xətt boyunca iki və ya daha çox rəng arasında hamar keçid yaradır. Konstruktor başlanğıc və son nöqtələri, rənglər massivini və onların mövqelərini (kafel rejimi) qəbul edir. Kafel rejimi qradientdən kənar davranışı müəyyən edir: CLAMP (son rəngin təkrarlanması), MIRROR (əks etdirmə) və ya REPEAT (təkrarlama). LinearGradient fon doldurmaları və gedişat zolaqları üçün fəal istifadə olunur.

RadialGradient mərkəzdən kənarlara dairəvi qradient yaradır. Mərkəz koordinatlarla təyin edilir, radius rəng keçid sahəsini müəyyən edir. Radial qradientin görünüşü nöqtə işıq mənbəyindən işıqlandırmanı xatırladır — bu, düymələrin parıltısını və aktiv elementlərin işıqlandırılmasını simulyasiya etmək üçün tez-tez istifadə olunur.

Bulanıqlıq və kölgələr (BlurMaskFilter)

BlurMaskFilter çəkilən elementlər ətrafında bulanıqlıq effekti əlavə edir. Konstruktor bulanıqlıq radiusunu və stili qəbul edir: NORMAL (bütün istiqamətlərdə bulanıqlıq), INNER (yalnız fiqurun daxilində), OUTER (yalnız xaricdə) və SOLID (fiqur + xarici bulanıqlıq). BlurMaskFilter Paint-in istənilən növləri ilə işləyir və kölgələr və parıltı effektləri yaratmaq üçün tez-tez istifadə olunur.

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-in Canvas ilə istifadə nümunəsi

Qradient doldurma və mətn izahı ilə dairə çəkən xüsusi View-in tam nümunəsini nəzərdən keçirək. Paint və Canvas birləşməsi minimal kodla mürəkkəb qrafika yaratmağa imkan verir. Bütün parametrlər performans üçün inisializasiyaya çıxarılmışdı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ıca Paint obyekti istifadə olunur: biri dairəni radial qradientlə doldurmaq üçün, ikincisi BlurMaskFilter ilə kölgəli mətn üçün. Belə bölmə parametrləri müstəqil konfiqurasiya etməyə və müxtəlif element növlərinin çəkilməsi arasında Paint vəziyyətinin sıfırlanmasının qarşısını almağa imkan verir. Performansı artırmaq üçün hər iki Paint onDraw-da deyil, konstruktorda yaradılır.

Müxtəlif piksel sıxlığı olan cihazlarda miqyaslama zamanı ölçü dəyərləri TypedValue.applyDimension vasitəsilə yenidən hesablanmalıdır. Bu olmadan mətn və qradient mdpi və xxxhdpi ekranlarda fərqli görünəcək. Nümunədə mətn ölçüsü sp-də təyin edilir ki, bu da istifadəçinin sistem şrift ölçüsü parametrlərinə avtomatik uyğunlaşır.

Tez-tez verilən suallar

Paint Canvas-dan nə ilə fərqlənir?

Canvas rəsm əməliyyatlarını (drawCircle, drawLine) yerinə yetirir, Paint isə stil — rəng, qalınlıq, şrift təyin edir. Canvas stil parametrlərini ehtiva etmir, buna görə Paint olmadan heç bir rəsm əməliyyatının vizual effekti yoxdur.

Müxtəlif fiqurlar üçün bir Paint istifadə etmək olar?

Bəli, bir Paint obyekti çoxsaylı fiqurlar üçün təkrar istifadə edilə bilər. Müxtəlif element növləri (fon, mətn, kontur) üçün ayrıca Paint yaratmaq tövsiyə olunur, lakin hər fiqur üçün yox — bu, zibil yığanın yükünü azaldır.

Paint-i standart parametrlərə necə sıfırlamaq olar?

reset metodu Paint-i yeni nümunəyə ekvivalent vəziyyətə qaytarır. Alternativ olaraq flag ilə set istifadə etmək olar, lakin reset kodun oxunaqlılığı üçün daha üstündür. Sıfırlamadan sonra bütün stil parametrləri standart dəyərlər alır.

Paint onDraw-da performansa təsir edirmi?

Paint-in onDraw daxilində yaradılması hər kadrda ayırma yaradır ki, bu da GC donmalarına səbəb olur. Bütün Paint obyektləri View konstruktorunda yaradılmalıdır. onDraw-da setterlər vasitəsilə parametrlərin dəyişdirilməsi təhlükəsizdir və yeni obyektlər yaratmır.

Paint-də mətnin şəffaf fonunu necə etmək olar?

Android-də mətn həmişə şəffaf fonla çəkilir. drawText metodu yalnız glifləri göstərir, fon düzbucaqlısı olmadan. Mətn altında fon lazımdırsa, əvvəlcə ayrıca Paint ilə drawRoundRect vasitəsilə düzbucaqlı çəkin, sonra mətni çəkin.

Nəticə

  • Paint — Canvas-da qrafikanın stilizasiyası üçün konfiqurasiya sinfi, rəng, qalınlıq, şrift və effektləri müəyyən edir.
  • setColorsetAlpha minimal əlavə yüklə rəng və şəffaflığı idarə edir.
  • Style (FILL, STROKE, FILL_AND_STROKE) konturun, doldurmanın və ya hər iki variantın çəkilib-çəkilmədiyini müəyyən edir.
  • TypefacesetTextSize Downloadable Fonts dəstəyi və ekran adaptasiyası ilə şriftlərə cavabdehdir.
  • Shader — LinearGradient, RadialGradient, BitmapShader — qradientlər və teksturalar əlavə edir.
  • GC donmalarının qarşısını almaq üçün Paint-i onDraw-da deyil, View konstruktorunda yaradın.
  • Paint-i element növlərinə görə bölün: doldurma, kontur, mətn — çevik konfiqurasiya və kod oxunaqlılığı üçün.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun