2009-06-19 23 views
17

Ben Görünüm genişleten bir sınıf RoundIcon oluşturduk ve sınıf setIconImage() yöntemini içerir:Android: Bir grafik elemanı nasıl yeniden çizilir?

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

ve yöntem onDraw() vardır:

@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(); 
} 

sorun fonksiyonu olmasıdır onDraw() her zaman metodu setIconImage() ana aktiviteden çağrılır ve bu nedenle kullanıcı arayüzünde simge değişmez.

Yöntem setIconImage çağrıldığında görüntüyü yeniden çizmek için kodun nasıl değiştirileceğini bilen var mı?

cevap

42

yalnızca geçersiz içine görünüm görünüm daha küçük bir alana güncelliyoruz eğer

Invalidate'yi, görünümündeki tüm pikselleri yeniden çizilmesi gerekiyor görüşünü söyleyecektir View.invalidate() yerine View.refreshDrawableState() ait çağıran (Rect) Deneyin performans artışı için aşırı yük.

7

Kesinlikle refreshDrawableState() yerine geçersiz dosyayı çağırın. Arka plandaki postInvalidate() öğesinde ne işinize devam edeceğinizi ve ne zaman işleneceğini kontrol etmek isteyebilirsiniz.

İlgili konular