2013-04-27 5 views
4

Я пытаюсь вычислить размер для этого изображения, которое будет загружено из Интернета, используя эту строку imgLoader.DisplayImage(url, R.drawable.thumbnail_background, image);. Проблема в том, что orgHeight становится нулевым, и вы не можете делить на ноль. Но почему это orgHeight 0?Обновление layoutParams не работает

// Add the imageview and calculate its dimensions 
     //assuming your layout is in a LinearLayout as its root 
     LinearLayout layout = (LinearLayout)findViewById(R.id.layout); 

     ImageView image = (ImageView)findViewById(R.id.photo); 

     ImageLoader imgLoader = new ImageLoader(getApplicationContext()); 
     imgLoader.DisplayImage(url, R.drawable.thumbnail_background, image); 

     int newHeight = getWindowManager().getDefaultDisplay().getHeight()/2; 
     int orgWidth = image.getWidth(); 
     int orgHeight = image.getHeight(); 

     //double check my math, this should be right, though 
     int newWidth = (int) Math.floor((orgWidth * newHeight)/orgHeight); 

     //Use RelativeLayout.LayoutParams if your parent is a RelativeLayout 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
      newWidth, newHeight); 
     image.setLayoutParams(params); 
     image.setScaleType(ImageView.ScaleType.CENTER_CROP); 
     layout.updateViewLayout(image, params);  

Мой ImageView XML, как это:

<ImageView 
      android:id="@+id/photo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
     /> 

ответ

7

Взгляды еще не заложены в методе onCreate() поэтому их размеры равны 0. Дать Runnable от onCreate(), чтобы получить правильные значения:

image.post(new Runnable() { 

@Override 
public void run() { 
    int newHeight = getWindowManager().getDefaultDisplay().getHeight()/2; 
    int orgWidth = image.getWidth(); 
    int orgHeight = image.getHeight(); 

    //double check my math, this should be right, though 
    int newWidth = (int) Math.floor((orgWidth * newHeight)/orgHeight); 

    //Use RelativeLayout.LayoutParams if your parent is a RelativeLayout 
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
     newWidth, newHeight); 
    image.setLayoutParams(params); 
    image.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    layout.updateViewLayout(image, params);  
} 

}); 
+0

Спасибо, это работает, но теперь у меня есть еще одна проблема, высота изображения не рассчитывается правильно, у меня есть - это выглядит - обивка сверху и снизу. – user6827

+0

Или влево и вправо * – user6827

+0

@ user6827 Попробуйте использовать 'ImageView.ScaleType.FIT_XY'. – Luksprog

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