2011-04-07 7 views
0

먼저 웹에서 사진을 보여주는 사용자 지정 구성 요소가 있습니다. 간단한 레이아웃이고 원 진행 바 및 ImageView가 포함됩니다. 기본 상태에서는 진행 표시 줄이 보이고 그림 다운로드 중에 표시되며 끝나면 진행 막대를 숨기고 ImageView에 그림을 표시합니다. 그것은 아주 잘 작동하지만 int 에뮬레이터와 HTC 영웅에 나는 오류가 발생했습니다. solution here을 찾았습니다. 하지만 내 문제는 그 TARGET_WIDTH 및 TARGET_HEIGHT 때로는 60x90, 때로는 fill_parent x fill_parent, 수정하지 않으며 디코딩 기능에서이 값을 계산할 수 없습니다. 예를 들어 나는 layout_width = "fill_parent"를 사용하는 XML에 내 시야를 추가 및 활동안드로이드 비트 맵 inSampleSize 다른 대상 크기로

super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

ImageLoader picture = (ImageLoader) findViewById(R.id.picture); 
picture.load("http://winportal.net/images/galleries/wallpapers/Earth.jpg"); 

에서 사용하고 부하 방법에 내가 용액으로부터 디코드 함수를 호출하고 여기에 시도 크기 계산 :

... 
this.onMeasure(0, 0); 
Log.d("Log", "Layout width: " + this.getMeasuredWidth()); 

TARGET_WIDTH = this.getMeasuredWidth(); 
... 
을 그것을 포함입니다 - - 24 bacause가 진행 막대의 폭을 가지고 왜 이해가 안

하지만, 레이아웃 fill_parent 폭 : "24 레이아웃 폭 :"

는 그 결과이다. 나는 onMeasure 메서드를 오버라이드했지만 0을 얻었습니다.

@Override 
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 

    int parentWidth = MeasureSpec.getSize(widthMeasureSpec); 
    int parentHeight = MeasureSpec.getSize(heightMeasureSpec); 
    this.setMeasuredDimension(parentWidth, parentHeight); 
} 

overrideSizeChanged 역시 시도했습니다. 내 레이아웃 크기를 계산할 수있는 방법 디코드 :(

을 한 후, 그것은 좋은 값을 줄입니다하지만 나중에 실행하는 것

답변

0

는 "this.onMeasure (0, 0);"호출하면? 당신이 측정을 수행 할 뷰를 강제로 다음 규칙이 적용됩니다 : UNSPECIFIED보기가 다음 상태입니다 : ProgressBar가 보이고 ImageView가 숨겨져 결과가 24가됩니다.

처음에는 FrameLayout과 ProgressBar 및 ImageView를 사용하려고 시도합니다. t는 측정에 관심을 가져야 만합니다. 이미지가 너무 크지 않은지 확인하십시오 (OutOfMemory의 경우).으로 크기를 확인하는 것보다 임시 파일로 이미지 파일을 다운로드 할 수 있습니다., 적절한 샘플링 크기를 계산하고 디코딩, ImageView 용 비트 맵 설정, ImageView 용 축척 type 설정.

관련 문제