2016-03-21 4 views
0

Ich versuche, einen bestimmten Teil/Frame eines größeren Bildes in einem ImageView zu zeigen. Ich habe verschiedene XML-Attribute ausprobiert (scaleType, maxHeight, usw.), aber ich konnte es selbst nicht herausfinden.In Android, wie man ein beschnittenes Bild verschiebt? (Advanced ImageView Positionierung)

Im Grunde, was ich will, ist nur diese dieser bigger picture, die in meinem Ordner "Drawable" liegt, an der Spitze meiner Tätigkeit zu zeigen.

-Code bisher:

<ImageView 
     android:layout_width="match_parent" 
     android:layout_height="20dp" 
     android:layout_marginTop="1dp" 
     android:src="@drawable/coffee" 
     android:scaleType="centerCrop" /> 

Was kann ich das gewünschte Ergebnis zu erhalten tun, das heißt das beschnittene Bild zu verschieben, nur das Oberteil zu zeigen.

+0

android: Scaletype = "fitStart" nicht funktioniert? – Chol

+0

leider nein, das ist das Ergebnis: http://i.imgur.com/8SrdDD2.png –

Antwort

0

versuchen diese, seine adaequat:

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

    @Override 
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) { 
     super.onLayout(changed, left, top, right, bottom); 
     recomputeImgMatrix(); 
    } 

    @Override 
    protected boolean setFrame(int l, int t, int r, int b) { 
     recomputeImgMatrix(); 
     return super.setFrame(l, t, r, b); 
    }  

    private void recomputeImgMatrix() { 
     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); 
    } 
} 
+0

Vielen Dank für eine Lösung, aber ich war irgendwie auf der Suche nach einer kürzeren XML-Lösung, wenn es so viel Java-Code benötigt, würde es viel einfacher sein, ein zweites bereits manuell zugeschnittenes Bild als Ressource zu verwenden. –