2009-06-19 16 views
17

मैं एक वर्ग RoundIcon जो दृश्य फैली पैदा की है और वर्ग setIconImage() विधि में शामिल हैं:एंड्रॉइड: ग्राफिक तत्व को फिर से कैसे निकालें?

public void setIconImage(int imageFromResources) { 
    iconImage = BitmapFactory.decodeResource(getResources(), imageFromResources); 
    iconWidth = iconImage.getWidth(); 
    iconHeight = iconImage.getHeight(); 
    refreshDrawableState(); 
} 

और वहाँ एक विधि OnDraw() है:

@Override 
protected void onDraw(Canvas canvas) { 

    if(px == 0 || py == 0) 
    { 
     px = 50; 
     py = 50; 
    } 


    canvas.drawCircle(px, py, circleRadius, circlePaint); 
    canvas.save(); 

    if(iconImage != null) 
    { 
     int cardinalX = px - iconWidth/2; 
     int cardinalY = py - iconHeight/2; 
     canvas.drawBitmap(iconImage, cardinalX, cardinalY, iconPaint); 
    } 

    canvas.restore(); 
} 

समस्या समारोह है कि है OnDraw() प्रत्येक बार विधि सेट IconImage() को मुख्य गतिविधि से कॉल नहीं किया जाता है और इसलिए उपयोगकर्ता इंटरफ़ेस में आइकन नहीं बदलता है।

क्या किसी को भी विधि सेट करने के लिए कोड को संशोधित करने के लिए कोड को संशोधित करने के बारे में पता है IconImage कहा जाता है?

उत्तर

42

बुला View.invalidate()View.refreshDrawableState() के बजाय

अमान्य दृश्य बता देंगे कि ध्यान में रखते हुए पिक्सल के सभी फिर से ताज़ा करने की आवश्यकता है, आप केवल अमान्य में दृश्य नज़र के एक छोटे क्षेत्र अद्यतन कर रहे हैं, तो कोशिश करें (रेक्ट) एक प्रदर्शन बढ़ावा के लिए अधिभार।

7

निश्चित रूप से रीफ्रेश करने के बजाय अमान्य को कॉल करें DrawableState()। हो सकता है कि आप यह जांचना चाहें कि आपका क्या थ्रेड है और यदि पृष्ठभूमि कॉल पर पोस्ट करें वैधता()।

संबंधित मुद्दे