Koduję Androida i mam obraz. Chcę ustawić scaletype tego do topcrop. Mogę znaleźć centercrop w opcjach, ale to nie moja prośba. Jak mam zrobić?Jak ustawić obrazek z podglądem do topCrop
Odpowiedz
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);
}
}
Nie wierzę trzeba widoku niestandardowego obrazu dla tego produktu. Wszystko, co musisz zrobić, to ustawić scaleType
na matrix
i ustawić niestandardową matrycę na ImageView
.
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.
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
Tak, to prawda, nauczyłem się tego na własnej skórze. Zachowuje się inaczej na różnych ekranach. – rahulxyz
to działa. dzięki –
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. –
@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