2011-01-25 9 views
5

Próbuję zaimplementować ImageView z możliwością przechowywania zarówno zdjęć poziomych jak i pionowych. Te obrazy powinny pasować do szerokości widoku obrazu (jeśli jest krajobraz) lub wysokości (jeśli jest portretem), ale w każdym przypadku muszą być wyrównane do górnej krawędzi widoku bez marginesów i wypełnień.Android ImageView ScaleType * FIT_TOP *

Co chciałbym osiągnąć coś takiego jak android:scaleType="fitStart" ale skupione w przypadku zdjęć portretowych lub wyrównany do góry w przypadku zdjęć krajobrazowych.

Dodano:

Teraz używam takiego brzydkiego kodu, który wydaje się działać, ale nie jestem pewien, że jest to najlepsze rozwiązanie:

<com.custom.layout.MyImageView 
     android:id="@+id/detail_view_image" 
     android:src="@drawable/logo" 
     android:background="#fff" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_centerHorizontal="true" 
     android:cropToPadding="false" 
     android:adjustViewBounds="false" 
/> 

a następnie w mojej klasie, która rozciąga się ImageView ja zrobić:

@Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int imgWidth = getDrawable().getIntrinsicWidth(); 
     int imgHeight = getDrawable().getIntrinsicHeight(); 

     if(imgWidth>imgHeight) 
      setScaleType(ScaleType.FIT_START); 
     else 
      setScaleType(ScaleType.FIT_CENTER); 

     int width = measureWidth(widthMeasureSpec); 
     int height = measureHeight(heightMeasureSpec);  

     setMeasuredDimension(width, height); 
    } 
+0

Szukam czegoś podobnego, czy kiedykolwiek znalazłeś rozwiązanie tego problemu? –

+0

Niestety nie udało mi się, użyłem kodu, który napisałem powyżej ... – 0m4r

+1

ok, dzięki za kod! –

Odpowiedz

2

Zamiast nadrzędnych rodzimych widoki można po prostu umieścić fragment w onCreate() metoda, która zmienia scaleType z ImageView w zależności od orientacji telefonu .

Niektóre przykładowy fragment (nie jestem pewien, że to działa tak samo jak to, ale aby dostać się pomysł), w metodzie onCreate:

ImageView imgView = findViewById(R.id.myImage); 
//portrairt orientation 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
    imgView.setScaleType(ScaleType.FIT_CENTER); 
} else { //landscape orientation 
    imgView.setScaleType(ScaleType.FIT_START); 
} 

więc gdy zmiana orientacji dzieje się wtedy onCreate zostanie wywołana ponownie i zmień typ skali widoku, a jeśli nadpisujeszConfigurationChanged(), powinieneś dodać powyższy fragment ponownie, gdzie chcesz. Wypróbuj i daj mi znać, czy zadziałało

+0

Potwierdzenie? dyskusja? – 10s