2016-03-21 49 views
0

我想在ImageView中顯示更大圖片的特定部分/框架。 我嘗試了幾個不同的XML屬性(scaleType,maxHeight等),但我自己弄不清楚。在Android中,如何移動裁剪圖像? (高級ImageView定位)

基本上我想要的是隻顯示這bigger picturetop part位於我的'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代碼,它會只要使用已經手動剪切的圖像作爲資源就簡單多了。 –