2014-03-27 2 views
1

setImageBitmap()을 대체하는 ImageView의 하위 클래스가 있는데, 주어진 비트 맵을 가로 채서 뷰의 종횡비에 맞게 채울 수 있습니다. 이를 위해보기의 크기를 알아야하지만 getWidth()getHeight()은 모두 setImageBitmap() 동안 0을 반환합니다. setImageBitmap() 동안 변화가 없기 때문에오버 라이드 된 setImageBitmap()에서 ImageView의 크기를 얻는 방법

private Bitmap pending_bitmap; 

@Override public void setImageBitmap(Bitmap b) { 
    if (getWidth() == 0 || getHeight() == 0) pending_bitmap = b; 
    else applyBitmap(b); 
} 

@Override public void onSizeChanged(int w, int h, int old_w, int old_h) { 
    if (pending_bitmap != null) { 
     applyBitmap(pending_bitmap); 
     pending_bitmap = null; 
    } 
} 

private void applyBitmap(b) { 
    // Do some stuff that needs getWidth() and getHeight() 
    super.setImageBitmap(b); 
} 

은 그러나, 지금 onSizeChanged()가 호출되지 않는 :

onSizeChanged()가 올바른 크기로 호출되는 것을 본 후, 나는 그때까지 처리를 지연 시도했다.

크기를 강제로 조정하기 위해 null에서 super.setImageBitmap()으로 전달하려고했습니다. 모두 사용할 수 없습니다. 거기에 어딘가 내 처리를 할 pending_bitmap 가져올 수 있습니다 또는 비트 맵을 두 번 적용하지 않고 onSizeChanged() 호출 할 수있는 몇 가지 방법이 있나요?


편집 :이 또한 무시 setImageBitmap()에서 requestLayout()를 호출했습니다. 아무것도하지 않는 것 같습니다.

+0

시도해 보셨습니까? – pskink

+0

@pskink : 지금은 그렇습니다. 질문이 수정되었습니다. –

+0

btw 무엇을 달성하기를 원하십니까? 어쩌면 짧은 트랙이 있을까요? – pskink

답변

0

당신은

OnMesure() 

방법을 사용하자. View 클래스의

고관

0
//when declaring vars 
LinearLayout yourlayout; 

//in oncreate 
LinearLayout yourlayout=(LinearLayout) findViewById(R.id.yourlayoutid); 


//on size changed 
LayoutParams getlay =yourlayout.getLayoutParams(); 



    height =getlay.height; 
width=getlay.width; 
관련 문제