2014-10-13 3 views
0

불행히도 코드 샘플을 사용할 수 없습니다.Android : 모든 기기의 스크롤보기에서 하나의 (고밀도) 이미지를 스크롤하여 너비를 조절하십시오.

현재 지침 앱 종류를 개발 중입니다. ScrollvView, 세로 LinearLayout 및 일부 TextViews/ImageViews가있는 파편을 사용하여 제품 작동 방식을 설명합니다.

이미지는 Android에서 벡터 이미지가 지원되지 않기 때문에 png로 저장하는 단순한 벡터 그래픽입니다. 원래 이상 스크롤에서 prefent하는

Example of the images

이미지는 항상 나머지의 android:scaleType="fitXY" (Portait입니다 및 가로)와에서 ScrollViewer를 사용하여 화면이 걸리는 치료를 채우고 있습니다 (이미지보기에서 android:adjustViewBounds="true"를 사용하여 예를 들면 다음과 같습니다이다 이미지의 크기).

다양한 해상도와 밀도에 대해 서로 다른 버전을 사용하기 위해 Google의 가이드 라인을 읽었지 만 이는 내 목표에 부합하지 않는 것으로 보입니다. 제 아이디어는 드로어 블 폴더에 고해상도 이미지 (2000px 너비)를 하나만 공급하고 나머지는 안드로이드 자동 스케일링을하도록하는 것입니다.

제가 생각할 수있는 유일한 문제는 기억입니다.하지만 내부가 어떻게 작동하는지 잘 모르겠습니다. OutOfMemory가 이미지를 표시 할 때만 발생하는 경우, 처음에는 자동 크기 조절이 문제가되지 않아야합니다.

스케일러가 메모리 문제를 일으킬 수있는 경우 다양한 너비 (예 : 800pixel, 1500pixel 및 2200pixel)의 이미지 3 개를 사용하여 다른 리소스 디렉토리에 넣을 생각입니다. 이것은 가능하지 않습니다 ... 리소스 디렉토리 용 Android Studio 마법사에는 "최소 화면 너비"옵션이 있지만 dp (밀도 독립 픽셀)에 대해서만 옵션이 있습니다! 실제 장치 픽셀에 대한 리소스 파일을 원합니다. 안드로이드가 가장 가까운 피팅을 취하고 정확한 일치를 찾을 수없는 경우 기본값으로 되돌아 가지 않기를 바랍니다. 내 이미지는 항상 화면을 채우고 있기 때문에 밀도에 신경 쓰지 않습니다. 그래서 한마디에

:

  • 작은 파일 크기 문제로 하나의 큰 픽셀 이미지를 제공 있습니까?

  • 그렇다면 어떻게 장치 픽셀 리소스 디렉토리를 설정할 수 있습니까?

앱의 특성상 이미 많은 양의 이미지가 있습니다. 그게 내가 다루는 이미지의 수를 x- 폴드하는 몇 번씩 각각을 복제하고 싶지 않은 이유 다. 이 앱은 API 11 이후 버전이다.

입력 해 주셔서 감사합니다. Soko

답변

1

마지막으로 메모리 문제없이 한 이미지를 장치 너비에 비례하게 조정할 수있는 해결책을 발견했습니다.

  1. 먼저 당신은 드로어 블-xxhdpi 폴더에 이미지를 넣어 다소 높은 해상도
  2. 에 이미지 (my_image.png)를 작성해야합니다.
  3. this 멋진 답변을 사용하여 Android ImageView 클래스를 확장합니다. 아래 그림과 같이
  4. 는 레이아웃에 사용 :
  5. 여기

나를 위해 작동 레이아웃은 다음과 같습니다

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:fillViewport="true"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <TextView 
      android:id="@+id/main_text_view" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/hello_world" /> 

     <my.package.name.DynamicImageView 
      android:id="@+id/main_image" 
      android:adjustViewBounds="true" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/main_text_view" 
      android:src="@drawable/my_image" 
      android:scaleType="fitXY"/> 

     <my.package.name.DynamicImageView 
      android:id="@+id/main_image2" 
      android:adjustViewBounds="true" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/main_image" 
      android:src="@drawable/my_image" 
      android:scaleType="fitXY"/> 

     <TextView 
      android:id="@+id/main_text_view2" 
      android:layout_below="@id/main_image2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/hello_world" /> 

    </RelativeLayout> 
</ScrollView> 

좀 더 최종 정보 : 나는 점 2 테스트를 많이했다 (이 폴더에 이미지를 넣으십시오.)

이미지를 표준 drawable 폴더에 저장하면 포인트 3없이 크기 조정이 작동하지만 올인원의 OutOfMemory 예외가 발생할 수 있습니다 (안드로이드는 drawable에 있다고 생각합니다. 크기를 확인하지 않고는 작은 이미지 일뿐입니다).

이미지가 drawable-xxhdpi 폴더에있을 때 Android는 고해상도를 알고 필요하면 축소 만합니다. 그러나 밀도 맞춤 장치에서 이미지의 너비를 조정하지는 않습니다! 예를 들어 Nexus 10에서는 이미지가 원래 크기와 크기로 그려지며 scaleType에 대해 설정 한 내용과 상관이 없습니다 (inScaled 설명에서 설명한대로 inTargetDensity와 관련이 있음).

여기에서 유의해야 할 중요한 사항 중 하나는 콘텐츠 전체에 ScollView을 사용해야한다는 것입니다. ScrollView이 포함되어 있지 않으면 다른 해결책을 찾을 수 있습니다.

마지막으로 drawable-xxxhdpi 폴더를 사용할 수도 있지만 API 19에서 소개되었습니다. 시도해 보았지만 더 낮은 API에서도 작동했습니다. Apparently Android 빌드 도구 19.1.0 이상은 더 낮은 버전의 API를 처리합니다.

이 정보가 도움이 되었기를 바랍니다.

관련 문제