عنصر واجهة مستخدم مخصصة باستخدام LinearLayout لا تحصل على Ondraw ()

StackOverflow https://stackoverflow.com/questions/3480769

سؤال

أقوم بإنشاء عنصر واجهة مستخدم مخصصة عن طريق التمديد 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) أنت تخبر مجموعة أدوات واجهة المستخدم التي تريد رسمها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top