खुद को परिभाषित लेआउट, onDraw () विधि नहीं कहा जा रहा है


90

मैंने एक वर्ग को उस तरह परिभाषित किया that

public class TestMyFrameLayout extends FrameLayout{

    Paint mPaint;
    public TestMyFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TestMyFrameLayout(Context context) {
        super(context);
        mPaint = new Paint();
        mPaint.setColor(Color.GREEN);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(50f, 50f, 30, mPaint);
    }   
}

और इसे बुलाया:

TestMyFrameLayout myFrameLayout = new TestMyFrameLayout(this);
LayoutParams myFrameLayoutParams = new LayoutParams(300,300);
myFrameLayout.setLayoutParams(myFrameLayoutParams);
setContentView(myFrameLayout);

लेकिन वास्तव में TestMyFrameLayout.onDraw (कैनवास कैनवास) फ़ंक्शन को कॉल नहीं किया जा रहा है, क्यों?


क्या आप उस कोड को दिखा सकते हैं जहाँ आप इसका उपयोग करते हैं? @OverrideOnDraw से पहले भी जोड़ें : यह ग्रहण में टाइपो के लिए जाँच करेगा।
लॉरेंट '

3
थैंक यू लॉरेंट ’। मेरी समस्या पहले से ही हल है। इसे जोड़ें ।setWillNotDraw (झूठी);
Old_hou

जवाबों:


213

हल किया। this.setWillNotDraw(false); कंस्ट्रक्टर में जोड़ें


24
यह केवल एक क्रोधी डेवलपर हो सकता है जो इसे डिफ़ॉल्ट रूप से सही पर सेट करता है!
Narcís Calvet

2
यह क्यों मदद करेगा?
रयानशाओ

5
व्यूग्रुप्स के लिए @RSShao डिफ़ॉल्ट रूप से सही पर सेट है।
ataulm

1
क्यों कोई इसे सच करना चाहेगा? क्यों??
काई वांग

मुझे लगता है कि यह तब के लिए एक अनुकूलन है जब एक ViewGroup अपने लिए आकर्षित करने के लिए कुछ भी नहीं के साथ एक शुद्ध कंटेनर है
hmac
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.