2009-06-19 41 views
17

tôi đã tạo ra một RoundIcon lớp mà kéo dài Xem và lớp chứa) phương pháp setIconImage (:Android: Cách vẽ lại phần tử đồ họa?

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

và có một phương pháp 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(); 
} 

Vấn đề là các chức năng onDraw() không thực hiện mỗi khi phương thức setIconImage() được gọi từ hoạt động chính và do đó biểu tượng không thay đổi trong giao diện người dùng.

Có ai biết cách sửa đổi mã để vẽ lại hình ảnh mỗi khi phương thức setIconImage được gọi?

Trả lời

42

Thử gọi View.invalidate() thay vì View.refreshDrawableState()

làm mất hiệu lực sẽ cho quan điểm cho rằng tất cả các pixel trong giao diện cần phải vẽ lại, nếu bạn chỉ cập nhật một khu vực nhỏ hơn của view nhìn vào vô hiệu (Rect) quá tải để tăng hiệu suất.

7

Chắc chắn cuộc gọi không hợp lệ thay vì refreshDrawableState(). Bạn có thể muốn kiểm tra những gì thread của bạn trên và nếu trên một cuộc gọi nền postInvalidate().

Các vấn đề liên quan