2016-03-21 2 views
0

Я пытаюсь показать конкретную часть/фрейм большего изображения в файле ImageView. Я пробовал несколько разных атрибутов XML (scaleType, maxHeight и т. Д.), Но я не мог понять это сам.В Android, как сдвинуть обрезанное изображение? (продвинутое позиционирование ImageView)

В основном, что я хочу, это показать только этот top part этого bigger picture, который находится в моей папке «drawable», в верхней части моей деятельности.

код до сих пор:

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

Что я могу сделать, чтобы получить нужный результат, т.е. переложить обрезанное изображение, чтобы показать только верхнюю часть.

+0

андроида: scaleType = "fitStart" не работает? – Chol

+0

К сожалению нет, это результат: http://i.imgur.com/8SrdDD2.png –

ответ

0

Попробуйте это, его работает отлично:

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

Благодарим за решение, но я вроде как искал более короткое решение XML, если ему нужен этот много Java-код, он бы гораздо проще просто использовать второе уже отрезанное вручную изображение в качестве ресурса. –