2009-06-19 10 views
17

私はビューを拡張するクラスのRoundIconを作成し、クラスがsetIconImage()メソッドが含まれます。Android:グラフィック要素を再描画する方法は?

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 ()はmainアクティビティからsetIconImage()メソッドが呼び出されるたびに実行されないため、アイコンはユーザインタフェースで変更されません。

setIconImageメソッドが呼び出されるたびにイメージを再描画するためにコードを変更する方法を知っている人はいますか?

答えて

42

View.invalidate()の代わりに、あなただけの無効化(のRect)へのビューの外観の小さな領域を更新する場合の無効化は、ビュー内のすべてのピクセルを再描画する必要があるとの見解を教えてくれますView.refreshDrawableState()

を呼び出して試してみてくださいパフォーマンスの向上のために過負荷。

7

必ずrefreshDrawableState()の代わりにinvalidateを呼び出します。 postInvalidate()をバックグラウンドで呼び出している場合は、スレッドを確認したい場合があります。

関連する問題