2012-12-27 53 views
2

我想在ImageView中顯示一個大圖像(比屏幕寬),我使用矩陣縮放類型。在ImageView中對齊大圖但不縮放

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/pizza_intro_test" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:scaleType="matrix" 
     /> 

但是,我無法對齊ImageView中的圖像。我想顯示圖像的「右」部分,但ImageView顯示「左」部分。

這是當前的狀態:

Current state

這是我想達到的狀態:

Desired state

回答

0

嘗試將imageview的引力設置爲正確。

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="right" 
     android:src="@drawable/pizza_intro_test" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:scaleType="matrix" 
     /> 
+0

不,它不工作。 –

0

我通過設置源和目的地Rect做了類似的事情。訣竅是在目標Rect上使用負值。這樣,您可以「開始繪製」可見畫布外部的圖像左側,右側將繪製在畫布上。

目標矩形應該是這樣的:

float scale = canvas.getHeight()/(float)bm.getHeight(); 
Rect dest = new Rect(canvas.getWidth()-bm.getWidth()*scale,canvas.getWidth(), canvas.getHeight()) 

,你可以將其定義上的onDraw(),並與

canvas.drawBitmap(bm, null, mDstRect, mPaint); 

使用,則不需要上設置的任何scaleType XML或代碼。

+0

你能否澄清你的答案?你擴展ImageView嗎?我確實瞭解你的代碼,但我不確定在哪裏使用它。 –

+0

是的,你擴展ImageView,本地保存位圖,重寫onDraw()方法,並使用我給出的代碼繪製位圖。 – Udinic

0

也許這是爲時已晚,但即使我今天遇到同樣的問題,並通過使用下面的代碼段修復它。

所有對齊/縮放選項都在scaleType屬性中。

現在,如果要將圖像與ImageView的開頭對齊,請使用android:scaleType="fitStart"

同樣,android:scaleType="fitEnd"將其與ImageView的底部對齊。

+0

該圖片不再與android:scaleType =「fitStart」一起裁剪。 –

+0

是的,它不會。您無法定義多個scaleType。我所做的是以編程方式自己裁剪並設置它。 – Swayam