2012-08-07 53 views
3

我想在屏幕設備上放置帶有較大Y邊距的ImageView,這意味着圖像的一部分將不在屏幕上,然後該圖像將被裁剪。刪除ImageView自動調整大小

問題是,Android一直在縮放圖像,所以它適合屏幕內,但我不想這樣,我想要裁剪圖像。

如何強制裁剪ImageView而不調整大小?

P.S.我嘗試了所有可能的ScaleType屬性,它們都不適合我!

代碼:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="200dp" 
    android:background="@drawable/my_image" 
    android:scaleType="centerCrop" 
    />  

</RelativeLayout> 
+0

等待。 CENTER_CROP應該保持圖像沒有任何縮放的正常大小。請發佈代碼。 – DeeV 2012-08-07 19:49:30

+0

我只是給我的問題添加了一些代碼。 CENTER_CROP不適用於我。 – thomaus 2012-08-07 20:01:00

回答

4

嘗試用android:src更換android:background

+0

謝謝。圖像的底部被正確裁剪,但圖像的頂部也被裁剪,這很奇怪。 – thomaus 2012-08-07 20:33:27

+0

這是centerCrop的預期行爲。 對於您正在嘗試執行的操作,此[帖子](https://groups.google.com/forum/?fromgroups#!topic/android-developers/E84uy7W4r5s)可能會對您有所幫助: 「我認爲它應該有效把它放在一個框架佈局中,其寬度/高度的確切值(在裁剪之前指定最大圖像大小)然後在圖像視圖中,指定layout_gravity = right,寬度/高度爲wrap_content。 – 2012-08-07 20:46:18

3

與您的代碼第一個問題是,你使用:

android:background="@drawable/my_image" 

代替:

android:src="@drawable/my_image" 

(背景沒有的scaleType選項的作用)。

現在,如果這仍然沒有幫助,你可能不得不使用scaleType =「矩陣」,然後簡單地創建一個矩陣,將執行所需的工作。例如,讓我們假設你想:

  • 讓您的圖像
  • 比例尺的圖像,使寬度參數將等於X的比例(例如:X可以是屏幕的寬度)
  • 使圖像可見(所以裁剪圖像的底部)的頂部 - 我假定這就是爲什麼centerCrop可能不適合你

在這裏工作的代碼:

ImageView imgView = (ImageView)findViewById(R.id.my_image_view);  
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.my_image); 

Matrix matrix = new Matrix(); 
// Let's assume X = 400 
float scale = ((float) 400)/bitmap.getWidth(); 
matrix.setScale(scale, scale); 

imgView.setImageMatrix(matrix); 

並記住在xml文件中進行必要的更改。