عنصر واجهة مستخدم مخصصة باستخدام LinearLayout لا تحصل على Ondraw ()
-
28-09-2019 - |
سؤال
أقوم بإنشاء عنصر واجهة مستخدم مخصصة عن طريق التمديد LinearLayout
:
public class MyWidget extends LinearLayout {
private static Paint PAINT = new Paint(Paint.ANTI_ALIAS_FLAG);
static {
PAINT.setColor(Color.RED);
}
public MyWidget(Context context) {
this(context, null);
}
public MyWidget(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight()/2, canvas.getWidth()/2, PAINT);
// never gets called :-(
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
// this gets called, but with a canvas sized after the padding.
}
}
يمكنني إضافة أطفال على ما يرام ، لكنني لم أحصل على عادتي أبدًا onDraw()
يطلق عليها. dispatchDraw()
يتم استدعاؤه ، ولكن يبدو أن هذا يحتوي على قماش مختلف (واحد داخل الحشو. أحتاج إلى رسم منطقة التصميم بأكملها). هل هناك بعض العلم الذي يحتاج إلى تعيين للحصول على onDraw()
دعا للتخطيط؟
المحلول
تحتاج إلى الاتصال setWillNotDraw(false)
في مُنشرك.
نظرًا لأن التخطيط افتراضيًا لا يحتاج إلى رسم ، لذلك فإن التحسين هو عدم الاتصال هو طريقة الرسم. بالاتصال setWillNotDraw(false)
أنت تخبر مجموعة أدوات واجهة المستخدم التي تريد رسمها.
لا تنتمي إلى StackOverflow