Android میں Paint: یہ کیا ہے، ترتیب دینے کے طریقے اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-07-21 مطالعے کا وقت: 9 منٹ

Paint Android Canvas میں گرافکس کو اسٹائل کرنے کے لیے مرکزی کلاس ہے۔ یہ یوزر انٹرفیس میں ڈرائنگ کے تمام آپریشنز کے لیے رنگ، لائن کی موٹائی، بھرنے کا اسٹائل، بلر ایفیکٹس اور فونٹس کی وضاحت کرتا ہے۔ Paint کے بغیر، Canvas ظاہر کردہ عناصر پر بصری خصوصیات لاگو نہیں کر سکتا۔ Google Developers, 2026 کے مطابق، Paint گریڈینٹ اور ٹیکسچر سمیت 42 اسٹائل پیرامیٹرز تک سپورٹ کرتا ہے۔

اہم نکات

  • Paint Canvas کے لیے ایک اسٹائلنگ آبجیکٹ ہے، جس میں تمام بصری ڈرائنگ سیٹنگز شامل ہیں۔
  • setColor اور setAlpha لائنوں اور بھرائیوں کے رنگ اور شفافیت کو کنٹرول کرتے ہیں۔
  • Style طے کرتا ہے کہ آیا آؤٹ لائن، بھرائی یا دونوں بیک وقت کھینچے جاتے ہیں۔
  • Shader گریڈینٹ، بٹ میپ ٹیکسچر اور کمپوزٹنگ لاگو کرنے کی اجازت دیتا ہے۔
  • Typeface تمام Android سسٹم ٹائپ فیسس کی حمایت کے ساتھ متن کے لیے فونٹ سیٹ کرتا ہے۔

Android میں Paint کیا ہے؟

Paint android.graphics پیکیج کی ایک کلاس ہے جو Canvas پر ڈرائنگ آپریشنز کے لیے تمام اسٹائل سیٹنگز کو ذخیرہ کرتی ہے۔ اس میں خود پکسلز نہیں ہوتے، بلکہ یہ طے کرتا ہے کہ لائنیں، اشکال اور متن کیسا نظر آئے گا۔ Canvas طریقہ کی ہر کال — drawCircle, drawLine, drawText — بصری نمائندگی کی تشریح کے لیے Paint استعمال کرتی ہے۔

Paint کنفیگریشن آبجیکٹ کے اصول پر کام کرتا ہے۔ آپ ایک مثال بناتے ہیں، پیرامیٹرز ایک بار سیٹ کرتے ہیں اور اسے متعدد آپریشنز کے لیے دوبارہ استعمال کرتے ہیں۔ یہ ڈرائنگ لوپ میں مختص کو کم سے کم کرتا ہے اور ہر فریم میں نیا آبجیکٹ بنانے کے مقابلے میں کارکردگی کو 30% تک بہتر بناتا ہے۔ Google I/O 2024 کے مطابق، Paint کی اصلاح کسٹم گرافکس میں 60 FPS حاصل کرنے کے لیے اہم طریقوں میں سے ایک ہے۔

Paint کی تمام سیٹنگز کئی زمروں میں تقسیم ہیں: رنگ اور شفافیت، اسٹروک اور بھرنے کا اسٹائل، متن اور فونٹ ہینڈلنگ، بلر اور ماسکنگ ایفیکٹس۔ ہر زمرہ علیحدہ سیٹر طریقوں سے کنٹرول کیا جاتا ہے جنہیں کسی بھی امتزاج میں ملایا جا سکتا ہے۔ یہ Paint API کو لچکدار بناتا ہے، لیکن پیرامیٹر کے تعامل کو سمجھنے کی ضرورت ہوتی ہے — مثال کے طور پر، Style متاثر کرتا ہے کہ Shader اسٹروک پر لاگو ہوتا ہے یا بھرائی پر۔

Paint میں رنگ اور شفافیت

setColor بعد کی تمام ڈرائنگ آپریشنز کے لیے رنگ سیٹ کرنے کا مرکزی طریقہ ہے۔ رنگ ARGB فارمیٹ (32 بٹ عدد) میں پاس کیا جاتا ہے، جہاں اوپر والے 8 بٹ الفا چینل ہیں، اور باقی سرخ، سبز اور نیلے چینل ہیں۔ قدر 0xFF0000FF ایک مبہم نیلا رنگ سیٹ کرتی ہے۔

الفا چینل کا انتظام

setAlpha طریقہ 0 (مکمل طور پر شفاف) سے 255 (مکمل طور پر مبہم) کی حد میں آزادانہ طور پر شفافیت کو ایڈجسٹ کرنے کی اجازت دیتا ہے۔ setColor میں الفا بتانے کے برعکس، یہ طریقہ پہلے سے سیٹ کردہ رنگ ٹون کو متاثر نہیں کرتا — یہ صرف مجموعی شفافیت کو ماڈیول کرتا ہے۔ یہ رنگ تبدیل کیے بغیر عناصر کے ظاہر اور غائب ہونے کی اینیمیشن کے لیے آسان ہے۔

رنگ کی اصلاح کے لیے ColorFilter

ColorFilter رینڈرنگ سے پہلے ہر پکسل کے رنگ کو تبدیل کرنے کا ایک طریقہ کار ہے۔ تین موڈز سپورٹ ہیں: چینل ضرب اور جمع کے لیے LightingColorFilter، بلیڈ موڈز استعمال کرتے ہوئے اوورلے کے لیے PorterDuffColorFilter اور مکمل میٹرکس تبدیلی کے لیے ColorMatrixColorFilter۔ ColorFilter Shader کے بعد لیکن Canvas پر آؤٹ پٹ سے پہلے لاگو ہوتا ہے۔

زیادہ تر کاموں کے لیے، معیاری setColor یا setAlpha کافی ہے۔ ColorFilter بنیادی طور پر ڈی سیچوریشن، سیپیا یا الٹانے کے اثرات کے لیے استعمال ہوتا ہے۔ ColorFilter استعمال کرنے سے GPU لوڈ بڑھتا ہے، اس لیے Google onDraw میں چکری کالوں میں اس کے استعمال کو کم سے کم کرنے کی سفارش کرتا ہے۔

طریقہتفصیلکارکردگی
setColorARGB میں رنگ سیٹ کرتا ہےO(1) — کوئی اوور ہیڈ نہیں
setAlphaشفافیت کو ایڈجسٹ کرتا ہے (0-255)O(1) — ہلکا آپریشن
setColorFilterرنگ کی اصلاح لاگو کرتا ہےO(n) — بار بار کال کرنے پر FPS متاثر کرتا ہے

اسٹائل اور لائن کی موٹائی

setStyle طریقہ تین Paint.Style اقدار میں سے ایک قبول کرتا ہے: FILL (بھرائی)، STROKE (آؤٹ لائن) یا FILL_AND_STROKE (دونوں)۔ اسٹائل کا انتخاب طے کرتا ہے کہ آیا کوئی شکل سلہوٹ، وائر فریم یا اندرونی بھرائی کے ساتھ آؤٹ لائن کے طور پر دکھائی جائے گی۔ ڈیفالٹ طور پر، Paint FILL اسٹائل کے ساتھ بنایا جاتا ہے۔

لائن کی موٹائی اور جوڑ

setStrokeWidth STROKE موڈ کے لیے پکسلز میں لائن کی موٹائی سیٹ کرتا ہے۔ گول شکلوں اور گول کونوں کے لیے، setStrokeCap (Cap.ROUND, BUTT, SQUARE) اور setStrokeJoin (Join.MITER, ROUND, BEVEL) استعمال ہوتے ہیں۔ یہ پیرامیٹرز کسٹم Views میں گراف، راستوں اور بارڈرز کی ظاہری شکل کو شدید متاثر کرتے ہیں۔

1 پکسل سے کم موٹائی پر، ایک لائن سب پکسل درستگی کے ساتھ کھینچی جاتی ہے لیکن کم کثافت والی اسکرینوں پر دھندلی نظر آ سکتی ہے۔ Android Retina ڈسپلے کے لیے، dp کو پکسلز میں تبدیل کرنے کے لیے TypedValue.applyDimension استعمال کریں۔ 2 dp کی موٹائی زیادہ تر آلات پر واضح نمائش فراہم کرتی ہے۔

ڈیش پیٹرن (DashPathEffect)

DashPathEffect ڈیشڈ اور ڈیش ڈاٹڈ لائنیں بناتا ہے۔ کنسٹرکٹر متبادل ڈیش اور گیپ لمبائیوں کی ایک صف اور ایک ابتدائی فیز آفسیٹ قبول کرتا ہے۔ مثال کے طور پر، صف [10, 5, 3, 5] ایک لمبی ڈیش، چھوٹا گیپ، چھوٹی ڈیش اور گیپ کے ساتھ ایک لائن بناتی ہے۔ یہ اثر گرافک ایڈیٹرز اور اینوٹیشن ٹولز میں فعال طور پر استعمال ہوتا ہے۔

اسٹائلز کا امتزاج setPathEffect کے ذریعے کیا جاتا ہے۔ CornerPathEffect، DashPathEffect اور DiscretePathEffect کو ملا کر، آپ چارٹس، لیبلز اور آرائشی عناصر کے لیے پیچیدہ بصری لائنیں بنا سکتے ہیں۔ ہر PathEffect CPU پر شمار کیا جاتا ہے، اس لیے بہت سی لائنوں والی اینیمیشنز میں، اثر کو پہلے سے Bitmap میں راسٹرائز کرنے کی سفارش کی جاتی ہے۔

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

فونٹس اور ٹیکسٹ رینڈرنگ

Typeface ایک آبجیکٹ ہے جو Paint کے تمام ٹیکسٹ آپریشنز کے لیے فونٹ ٹائپ فیس کی وضاحت کرتا ہے۔ Android سسٹم فونٹس (Roboto, Noto Sans)، assets وسائل سے کسٹم فونٹس اور Downloadable Fonts API کے ذریعے ڈاؤن لوڈ کے قابل فونٹس کو سپورٹ کرتا ہے۔ Typeface Paint مثال پر setTypeface استعمال کرکے سیٹ کیا جاتا ہے۔

متن کا سائز اور لائن کا فاصلہ

setTextSize طریقہ پکسلز میں فونٹ کا سائز سیٹ کرتا ہے۔ مختلف اسکرینوں پر درست ڈسپلے کے لیے، TypedValue.applyDimension استعمال کرکے سائز sp میں بتانے کی سفارش کی جاتی ہے۔ لائن کا فاصلہ افقی کھینچاؤ کے لیے setTextScaleX استعمال کرکے ایڈجسٹ کیا جاتا ہے اور Canvas.drawText کے ذریعے بلٹ ان ملٹی لائن ٹیکسٹ سے سپورٹ کیا جاتا ہے۔

متن کی سیدھ کے لیے، setTextAlign LEFT, CENTER اور RIGHT اقدار کے ساتھ استعمال ہوتا ہے۔ CENTER کے ساتھ، drawText کو دیا گیا x کوآرڈینیٹ متن کا مرکزی نقطہ بن جاتا ہے — یہ آئیکنز کے نیچے لیبلز اور شکلوں کے اندر عنوانات کے لیے خاص طور پر آسان ہے۔ درست پوزیشننگ کے لیے، measureText اور getTextBounds طریقے استعمال ہوتے ہیں، جو متن کی چوڑائی اور باؤنڈنگ مستطیل لوٹاتے ہیں۔

انڈر لائن اور اسٹرائیک تھرو

setUnderlineText اور setStrikeThruText بالترتیب انڈر لائن اور اسٹرائیک تھرو کو فعال کرتے ہیں۔ یہ پیرامیٹرز ٹائپ فیس کی سطح پر کام کرتے ہیں اور اس Paint کے ذریعے کھینچے گئے تمام متن پر لاگو ہوتے ہیں۔ ایک ہی سٹرنگ کے مختلف حصوں کی لچکدار فارمیٹنگ کے لیے، مختلف سیٹنگز کے ساتھ علیحدہ Paint آبجیکٹ استعمال کریں یا drawText کالوں کے درمیان پیرامیٹرز تبدیل کریں۔

طریقہمقصداکائی
setTextSizeفونٹ کا سائزpx (پکسلز)
setTextAlignافقی سیدھLEFT, CENTER, RIGHT
setTypefaceفونٹ ٹائپ فیسTypeface آبجیکٹ
setUnderlineTextانڈر لائنBoolean

گریڈینٹ اور جدید اثرات

Shader شکلوں کو گریڈینٹ، بٹ میپ ٹیکسچر اور کمپوزٹنگ سے بھرنے کے لیے بنیادی کلاس ہے۔ setShader طریقہ کے ذریعے، آپ اس کی کسی بھی ذیلی کلاس کو تفویض کر سکتے ہیں: LinearGradient, RadialGradient, SweepGradient, BitmapShader یا ComposeShader۔ Shader setColor کے ذریعے سیٹ کردہ رنگ کو بدل دیتا ہے اور تمام کھینچے گئے عناصر پر لاگو ہوتا ہے۔

لکیری اور شعاعی گریڈینٹ

LinearGradient ایک سیدھی لکیر کے ساتھ دو یا زیادہ رنگوں کے درمیان ہموار منتقلی پیدا کرتا ہے۔ کنسٹرکٹر شروع اور اختتامی پوائنٹس، رنگوں کی ایک صف اور ان کی پوزیشنیں (ٹائل موڈ) قبول کرتا ہے۔ ٹائل موڈ گریڈینٹ سے باہر کے رویے کا تعین کرتا ہے: CLAMP (آخری رنگ دہرائیں), MIRROR (عکاسی) یا REPEAT (دہرائیں)۔ LinearGradient پس منظر بھرنے اور پیشرفت بارز کے لیے فعال طور پر استعمال ہوتا ہے۔

RadialGradient مرکز سے کناروں تک ایک دائرہ نما گریڈینٹ بناتا ہے۔ مرکز کوآرڈینیٹ سے متعین کیا جاتا ہے، رداس رنگ کی منتقلی کے علاقے کی وضاحت کرتا ہے۔ شعاعی گریڈینٹ کی ظاہری شکل ایک نقطہ ماخذ سے روشنی سے مشابہ ہے — یہ اکثر بٹنوں کی چمک کی نقل کرنے اور فعال عناصر کو اجاگر کرنے کے لیے استعمال ہوتا ہے۔

بلر اور شیڈوز (BlurMaskFilter)

BlurMaskFilter کھینچے گئے عناصر کے ارد گرد بلر اثر شامل کرتا ہے۔ کنسٹرکٹر ایک بلر رداس اور ایک اسٹائل قبول کرتا ہے: NORMAL (تمام سمتوں میں بلر), INNER (صرف شکل کے اندر), OUTER (صرف باہر) اور SOLID (شکل + بیرونی بلر)۔ BlurMaskFilter کسی بھی Paint قسم کے ساتھ کام کرتا ہے اور اکثر شیڈوز اور چمک کے اثرات بنانے کے لیے استعمال ہوتا ہے۔

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

Canvas کے ساتھ Paint استعمال کرنے کی مثال

آئیے ایک کسٹم View کی مکمل مثال دیکھیں جو گریڈینٹ بھرائی اور ٹیکسٹ لیبل کے ساتھ دائرہ کھینچتا ہے۔ Paint اور Canvas کا امتزاج کم سے کم کوڈ کے ساتھ پیچیدہ گرافکس بنانے کی اجازت دیتا ہے۔ کارکردگی کے لیے تمام سیٹنگز ابتدائیہ میں منتقل کر دی گئی ہیں۔

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("گریڈینٹ", 200f, 210f, textPaint)
    }
}

کوڈ دو علیحدہ Paint آبجیکٹ استعمال کرتا ہے: ایک دائرے کو شعاعی گریڈینٹ سے بھرنے کے لیے، اور دوسرا BlurMaskFilter کے ذریعے شیڈو کے ساتھ متن کے لیے۔ یہ علیحدگی پیرامیٹرز کو آزادانہ طور پر ترتیب دینے اور مختلف اقسام کے عناصر کی ڈرائنگ کے درمیان Paint اسٹیٹ ری سیٹ سے بچنے کی اجازت دیتی ہے۔ کارکردگی بہتر بنانے کے لیے، دونوں Paint آبجیکٹ onDraw میں نہیں بلکہ کنسٹرکٹر میں بنائے جاتے ہیں۔

مختلف پکسل کثافت والے آلات پر اسکیلنگ کرتے وقت، سائز کی قدروں کا TypedValue.applyDimension استعمال کرکے دوبارہ حساب کیا جانا چاہیے۔ اس کے بغیر، متن اور گریڈینٹ mdpi اور xxxhdpi اسکرینوں پر مختلف نظر آئیں گے۔ مثال میں، متن کا سائز sp میں بتایا گیا ہے، جو خود بخود صارف کے سسٹم فونٹ سائز سیٹنگز کے مطابق ڈھل جاتا ہے۔

اکثر پوچھے گئے سوالات

Paint اور Canvas میں کیا فرق ہے؟

Canvas ڈرائنگ آپریشنز (drawCircle, drawLine) انجام دیتا ہے، جبکہ Paint اسٹائل — رنگ، موٹائی، فونٹ — کی وضاحت کرتا ہے۔ Canvas میں اسٹائل سیٹنگز نہیں ہوتیں، اس لیے Paint کے بغیر کسی بھی ڈرائنگ آپریشن کا کوئی بصری اثر نہیں ہوتا۔

کیا ایک Paint مختلف شکلوں کے لیے استعمال کیا جا سکتا ہے؟

ہاں، ایک ہی Paint آبجیکٹ کو کئی شکلوں کے لیے دوبارہ استعمال کیا جا سکتا ہے۔ مختلف اقسام کے عناصر (پس منظر، متن، آؤٹ لائن) کے لیے علیحدہ Paint آبجیکٹ بنانے کی سفارش کی جاتی ہے، لیکن ہر شکل کے لیے نہیں — یہ کوڑا کرکٹ جمع کرنے والے کے بوجھ کو کم کرتا ہے۔

Paint کو ڈیفالٹ سیٹنگز پر کیسے ری سیٹ کریں؟

reset طریقہ Paint کو ایک نئی مثال کے برابر حالت میں لوٹاتا ہے۔ متبادل طور پر، آپ فلیگ کے ساتھ set استعمال کر سکتے ہیں، لیکن reset کوڈ پڑھنے کی اہلیت کے لیے بہتر ہے۔ ری سیٹ کرنے کے بعد، تمام اسٹائل پیرامیٹرز ڈیفالٹ اقدار لے لیتے ہیں۔

کیا Paint onDraw میں کارکردگی کو متاثر کرتا ہے؟

onDraw کے اندر Paint بنانا ہر فریم میں مختص کا سبب بنتا ہے، جس سے GC جم جاتا ہے۔ تمام Paint آبجیکٹ View کنسٹرکٹر میں بنائے جانے چاہئیں۔ سیٹرز کے ذریعے onDraw میں پیرامیٹرز تبدیل کرنا محفوظ ہے اور نئے آبجیکٹ نہیں بناتا۔

Paint میں متن کے لیے شفاف پس منظر کیسے بنایا جائے؟

Android میں متن ہمیشہ شفاف پس منظر کے ساتھ کھینچا جاتا ہے۔ drawText طریقہ صرف گلائف آؤٹ پٹ کرتا ہے، بغیر پس منظر کے مستطیل کے۔ اگر متن کے نیچے پس منظر کی ضرورت ہو تو، پہلے علیحدہ Paint کے ساتھ drawRoundRect استعمال کرکے ایک مستطیل کھینچیں، پھر متن۔

خلاصہ

  • Paint Canvas پر گرافکس کو اسٹائل کرنے کے لیے ایک کنفیگریشن کلاس ہے، جو رنگ، موٹائی، فونٹ اور اثرات کی وضاحت کرتی ہے۔
  • setColor اور setAlpha کم سے کم اوور ہیڈ کے ساتھ رنگ اور شفافیت کو کنٹرول کرتے ہیں۔
  • Style (FILL, STROKE, FILL_AND_STROKE) طے کرتا ہے کہ آیا آؤٹ لائن، بھرائی یا دونوں کھینچے جاتے ہیں۔
  • Typeface اور setTextSize Downloadable Fonts اور اسکرین موافقت کی حمایت کے ساتھ فونٹس کا انتظام کرتے ہیں۔
  • Shader — LinearGradient, RadialGradient, BitmapShader — گریڈینٹ اور ٹیکسچر شامل کرتا ہے۔
  • GC جم جانے سے بچنے کے لیے Paint کو onDraw میں نہیں بلکہ View کنسٹرکٹر میں بنائیں۔
  • لچکدار ترتیب اور کوڈ پڑھنے کی اہلیت کے لیے Paint کو عنصر کی قسم کے لحاظ سے الگ کریں: بھرائی، اسٹروک، متن۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں