2013-07-19 117 views
0

好的,所以我在ImageView中使用了一個圖像來填充屏幕。我用scaletype =「centerCrop」保持縱橫比,如下所示:Android:如何找到背景圖像的縮放比例

<ImageView 
    android:id="@+id/imageView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:scaleType="centerCrop" 
    android:src="@drawable/full_bg" /> 

在代碼中,我怎麼去尋找縮放比例,或比例因子,起因於原始圖像的縮放圖像?我需要知道,所以我可以將這個相同的比例應用到位於戰略上位於背景頂部的按鈕上。這是我試圖讓縮放比例:

ImageView view = (ImageView) findViewById(R.id.imageView1); 
Log.i("Test", "x scale = " + Float.toString(view.getScaleX())); 

這將返回一個1.0(無標度),這是不是我要找的。我也試圖讓縮放位圖,而不是ImageView的,這也給了我原來的圖像尺寸(540px)的尺寸:

ImageView view = (ImageView) findViewById(R.id.imageView1); 
Drawable drawing = view.getDrawable(); 
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap(); 
Log.i("Test", "width = " + Integer.toString(bitmap.getWidth())); 

難道我接近這一切都錯了嗎?我找不到任何東西來幫助我解決這個問題。任何幫助將非常感激!

+0

馬克,你是否在onCreate或其他地方獲取比例和位圖寬度?我問,因爲在onCreate組件實際上還沒有畫到屏幕上。所以要求getWidth可能會在縮放發生之前返回默認大小。嘗試覆蓋onWindowFocusChanged,看看有什麼值(http://developer.android.com/reference/android/app/Activity.html#onWindowFocusChanged(boolean)) – spartygw

+0

爲什麼你不採取圖像視圖的高度和寬度? –

+0

@spartygw我在onCreate中獲得了縮放和位圖寬度,所以我試着按照你的建議重寫onWindowFocusChanged,但仍然得到了相同的結果。 –

回答

0

試試這個:我得到這個改變圖像大小取決於屏幕的大小,但是這可以通過改變

int width = metrics.widthPixels; 

輕易改變是

int width = bitmap.getWidth(); 

或任何你希望它被縮放到。注意寬度是你要去的大小。

public static void changeImageSize(ImageView object, Context context){ 

     DisplayMetrics metrics = new DisplayMetrics(); 
     ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metrics); 
     int width = metrics.widthPixels; 
     int height = metrics.heightPixels; 
     BitmapDrawable bmap = (BitmapDrawable) object.getDrawable(); 
     RelativeLayout.LayoutParams layout = (LayoutParams) object.getLayoutParams(); 
     float bmapWidth = bmap.getBitmap().getWidth(); 
     float bmapHeight = bmap.getBitmap().getHeight(); 

     int newBmapWidth = (int) (bmapWidth*width/480); 
     int newBmapHeight = (int) (bmapHeight*height/800); 
     layout.width = newBmapWidth; 
     layout.height = newBmapHeight; 
     object.setLayoutParams(layout); 
    } 
+0

我得仔細研究一下,看看它是否能解決我正在努力完成的任務。感謝您的建議。 –