2014-01-30 4 views
1

ActionBar 탭과 ViewPager로 앱을 쓰고 있습니다. 두 개의 탭과 두 개의 페이지가 있습니다. 첫 번째 페이지는 Fragmet이고 두 번째 페이지는 ListFragment입니다.Android-BitmapFactory.decodeFile이 내 앱을 천천히 만듭니다.

첫 번째 페이지에서는 이름, 물 사이의 간격, 사진 등의 정보를 뒤집습니다. 기본 사진 (자원)을 추가하고 식물 사진을 찍을 수 있습니다. 그런 다음 두 가지 방법으로 String과 같은 데이터베이스에 사진의 데이터를 저장합니다. 리소스의 이미지 ID 또는 저장된 사진의 경로.

두 번째 페이지 (ListFragment)에 사용자 지정 어댑터가있는 ListView가 있는데 문제가 있습니다. 목록의 한 행에는 두 개의 TextView, CheckBox 및 ImageView가 있습니다.

내 맞춤 어댑터의 getView 메소드는 모든 행이 정상적으로 작동하지만 비트 맵에 파일을 디코딩하는 데 많은 시간이 걸리며 모든 사진을 디코딩 한 후에도 내 애플리케이션을 알기 쉽게 만듭니다.

private void setUpImage(int position, ImageView photo) 
    { 
     if(plants.get(position).getPhoto().contains("jpg")) 
     { 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      options.inSampleSize = 10; 

      Bitmap bitmap = BitmapFactory.decodeFile(plants.get(position).getPhoto(), options); 

      photo.setImageBitmap(bitmap); 
     } 
     else 
     { 
      photo.setImageResource(Integer.parseInt(plants.get(position).getPhoto())); 
     } 
    } 

사람이 내 ListView에 각 목록 행에 디코딩 속도와 최저치를 이미지를 개선하는 방법을 알아 :

은 각 목록 행의 이미지를 설정하는 내 코드는?

답변

2

우선! options.inSampleSize = 10; 설정이 훨씬 큽니다. 일반적으로 inSampleSize은 2의 제곱으로 제공되며 2 또는 4과 같게 설정하면됩니다.

파일을 백그라운드 스레드로 디코딩하거나 지연로드 기술을 사용할 수 있습니다.

게으른로드 코드 here을 얻을 수 있습니다. 대답 this 답변을 참조하십시오.

+0

나는 핸들러를 사용하여 각 파일을 디코딩 했으니 까, 고마워. 나는 한 가지 더 질문이있다. 첫 번째 페이지에서 EditText를 클릭하면 해당 EditText에 텍스트를 쓰는 것처럼 보이는 키보드가 포커스를받습니다. 첫 번째 페이지의 layuot 공간을 차지합니다. 키보드가 사라지면 레이아웃은 가능한 모든 공간을 차지합니다. 그 키보드에 무언가를 할 수 있을까요? – user2511941

+0

글쎄! 나는 그런 요구 조건을 아직 만나지 않았다! 하지만 Android 문서를 볼 수 있습니다. http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft –

관련 문제