"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تحقيق زوايا شفافة في مستطيل مدور باستخدام مؤشر مثلث؟

كيفية تحقيق زوايا شفافة في مستطيل مدور باستخدام مؤشر مثلث؟

تم النشر بتاريخ 2024-11-12
تصفح:415

How to Achieve Transparent Corners in a Rounded Rectangle with a Triangular Pointer?

زوايا شفافة في الحدود مع زوايا مستديرة

في الكود المحدد، ترسم فئة TextBubbleBorder مستطيلًا مستديرًا بمؤشر مثلث في الأسفل . ومع ذلك، فإن الزوايا خارج المستطيل تمتد قليلاً، لتظهر لون خلفية اللوحة الأم. للحصول على زوايا شفافة، نقوم بتعديل طريقة PaintBorder لتشمل خطوة إضافية:

// طلاء لون BG للأصل، في كل مكان خارج المقطع // من فقاعة النص. المكون الأصلي = c.getParent(); إذا (الأصل!=فارغة) { اللون bg =parent.getBackground(); Rectangle rect = new Rectangle(0,0,width, height); منطقة borderRegion = منطقة جديدة (rect)؛ borderRegion.subtract(area); g2.setClip(borderRegion); g2.setColor(bg); g2.fillRect(0, 0, width, height); g2.setClip(null);
// Paint the BG color of the parent, everywhere outside the clip
// of the text bubble.
Component parent  = c.getParent();
if (parent!=null) {
    Color bg = parent.getBackground();
    Rectangle rect = new Rectangle(0,0,width, height);
    Area borderRegion = new Area(rect);
    borderRegion.subtract(area);
    g2.setClip(borderRegion);
    g2.setColor(bg);
    g2.fillRect(0, 0, width, height);
    g2.setClip(null);
}
يتحقق هذا الرمز مما إذا كان للمكون أصل، ويستعيد لون خلفيته، وينشئ مستطيلاً يمثل منطقة الحدود بأكملها. ثم يقوم بإنشاء منطقة حدود كائن المنطقة التي تمثل هذا المستطيل. بعد ذلك، يقوم بطرح المنطقة التي تمثل فقاعة النص من منطقة الحدود، مما يؤدي إلى إنشاء منطقة تسمى مقطع تمثل المنطقة خارج فقاعة النص.

باستخدام المقطع، يقوم الكود بتعيين منطقة القطع لكائن Graphics2D، ويملأها باستخدام لون خلفية الأصل، ثم يقوم بإعادة تعيين منطقة القطع لرسم الحدود نفسها. وهذا يضمن أن تصبح الزوايا خارج المستطيل المستدير شفافة، مما يوضح لون خلفية الوالدين.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3