2015-04-21 11 views

Odpowiedz

14

Niestandardowy obraz podglądu systemu Android do skalowania w górę przyciętego szuflady.

import android.content.Context; 
import android.graphics.Matrix; 
import android.widget.ImageView; 

/** 
* ImageView to display top-crop scale of an image view. 
* 
* @author Chris Arriola 
*/ 
public class TopCropImageView extends ImageView { 

public TopCropImageView(Context context) { 
    super(context); 
    setScaleType(ScaleType.MATRIX); 
} 

@Override 
protected boolean setFrame(int l, int t, int r, int b) { 
    final Matrix matrix = getImageMatrix(); 

    float scale; 
    final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight(); 
    final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom(); 
    final int drawableWidth = getDrawable().getIntrinsicWidth(); 
    final int drawableHeight = getDrawable().getIntrinsicHeight(); 

    if (drawableWidth * viewHeight > drawableHeight * viewWidth) { 
     scale = (float) viewHeight/(float) drawableHeight; 
    } else { 
     scale = (float) viewWidth/(float) drawableWidth; 
    } 

    matrix.setScale(scale, scale); 
    setImageMatrix(matrix); 

    return super.setFrame(l, t, r, b); 
}   
} 

https://gist.github.com/arriolac/3843346

+0

to działa. dzięki –

+0

jak to zaimplementować. zadałem pytanie dotyczące tego http://stackoverflow.com/questions/32359213/trying-to-use-custom-imageview-topcrop-in-android-but-the-tappapp-stop. –

+0

@Ja działa dobrze. Tworzę obliczenia macierzy w metodzie onLayout(), która jest wywoływana również przy obrocie, gdzie nie jest ustawiona funkcja setFrame. – box

3

Chciałem tylko tymczasowe rozwiązanie bez nadmiaru pracy. Wypróbuj ten obrazek za pomocą scrollY, przeciągając obraz w górę lub w dół. Wypróbuj go z innymi dp, a znajdziesz odpowiedni rozmiar.

+0

Podczas gdy to osiąga zadanie pod ręką, nie działa dla różnych rozdzielczości ekranu lub rozmiarów widoku rodzica. Prawdopodobnie nie jest zalecane do produkcji, ponieważ uzyskasz niespodziewane wyniki w środowisku naturalnym. :) – DoctorD

+0

Tak, to prawda, nauczyłem się tego na własnej skórze. Zachowuje się inaczej na różnych ekranach. – rahulxyz