2013-09-25 30 views
2

我想從Android的中心點放大位圖以實現縮放效果,但沒有成功。我的代碼是:從Android的中心點縮放位圖以進行放大效果

float scaleWidth = ((float) width + (i * 5))/width; 
float scaleHeight = ((float) height + (i * 5))/height; 

Matrix matrix = new Matrix(); 
matrix.setScale(scaleWidth, scaleHeight, scaleWidth/2, scaleHeight/2); 
Bitmap rescaledBitmap = Bitmap.createBitmap(src, 0, 0, width, height, matrix, true); 

result.add(rescaledBitmap); 

我除以2的尺寸設置樞轉點,但效果是僅僅該圖像是從0縮放,0作爲代替的座標從中心。我想要的是圖像是一個固定的大小,但從中心點放大(從而裁剪圖像)。

+0

那豈不是更容易使用Bitmap類的createScaledBitmap? http://developer.android.com/reference/android/graphics/Bitmap.html#createScaledBitmap(android.graphics.Bitmap,int,int,boolean) –

+0

試過嗎? http://stackoverflow.com/a/5286749/2074990 – bofredo

+0

@Pawel將重新調整圖像大小,我只是想放大,而使用相同的圖像大小。我的問題不是很清楚,會更新它。 – n83

回答

0

createBitmap中的第二個和第三個參數取左上角的x/y座標。你發送0,0,所以如果我理解正確...

圖像正確縮放,但圖像不居中,對嗎?

要居中它,您需要找到左上角的正確(x,y)點。這應該是原始寬度/高度的1/4。

所以......

Bitmap rescaledBitmap = Bitmap.createBitmap(src, (width/2), (height/2), width, height, matrix, true); 

應該工作。

+0

謝謝,但這對變焦應發生的實際座標沒有影響。想象一下,用放大鏡指向左上角而不是圖像中心來放大圖像,這就是我面臨的問題。 – n83

+0

好的,那我似乎誤解了你的原始問題。例如,您嘗試完成的操作與在Google地圖上按下放大按鈕時類似。所以,屏幕上的空間不會改變,但是我們放大了整個圖像的中間一半,原來圖像的中間一半現在佔據了原始圖像佔用的空間。我現在正確理解了嗎? – nhgrif

+0

是的,就是這樣!圖像尺寸總是相同的寬度和高度,但圖像本身放大其中心點。 – n83

3

我打算使用屬性動畫師提供替代解決方案,因爲這是我認爲更清晰的解決方案。

SomeLayout.xml(這裏的關鍵是,是的ViewGroup尺寸與取景,所以你要求它就會夾(如谷歌地圖放大))

<FrameLayout 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:layout_gravity="center"> 
    <View 
    android:id="@+id/zoom" 
    android:layout_width="100dp" 
    android:layout_height="100dp" 
    android:background="@drawable/myCoolImage" 
    /> 
</FrameLayout> 

代碼:(1 ,2,1將在1倍的規模,然後開始2X再回到1倍,這需要值的列表)

final View view = findViewById(R.id.zoom); 
view.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      final ObjectAnimator animator = ObjectAnimator.ofFloat(view, View.SCALE_X, 1, 2, 1) 
        .ofFloat(view, View.SCALE_Y, 1, 2, 1) 
        .setDuration(5000); 
      animator.setInterpolator(new AccelerateDecelerateInterpolator()); 
      animator.start(); 
     } 
    }); 

所以用這個版本的形象,如果你有一個變焦+和縮放 - 與onClickListeners意見,只要您知道要放大的數值,就可以基本模擬控制縮放。

同樣如前所述,與內部視圖大小相同的ViewGroup將強制動畫剪輯到其父界,而不是完全可見。

參考文獻:

Google Android ObjectAnimator