2013-07-19 5 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 (немасштабированная), который не то, что я ищу. Я также пытался получать размеры масштабируется Bitmap вместо 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

Мне нужно будет изучить это, чтобы узнать, решает ли он то, что я пытаюсь выполнить. Спасибо за предложение. –

Смежные вопросы