2014-10-14 3 views
0

Я получаю изображения, используя метод Html.fromHtml(). Поэтому я использую классы URLImageParser и URLDrawable, как определено здесь: Android HTML ImageGetter as AsyncTask.Изображения Android растянуты, когда телефон повернут

Я адаптировал два метода из URLImageParser, чтобы масштабировать изображение до ширины экрана при сохранении пропорции. Измененные методы заключаются в следующем:

@Override 
    protected void onPostExecute(Drawable result) { 


     DisplayMetrics dm = new DisplayMetrics(); 
     ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); 
     int width = dm.widthPixels; 
     int height = width * container.getHeight()/container.getWidth(); 


     urlDrawable.setBounds(0, 0, 0+width, 0+height); 

     // change the reference of the current drawable to the result 
     // from the HTTP call 
     urlDrawable.drawable = result; 

     // redraw the image by invalidating the container 
     URLImageParser.this.container.invalidate(); 

     // For ICS 
     URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight() 
     + height)); 

     // Pre ICS 
     URLImageParser.this.container.setEllipsize(null); 
    } 

и

public Drawable fetchDrawable(String urlString) { 
     try { 


      InputStream is = fetch(urlString); 
      Drawable drawable = Drawable.createFromStream(is, "src"); 

      DisplayMetrics dm = new DisplayMetrics(); 
      ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm); 
      int width = dm.widthPixels; 
      int height = width * container.getHeight()/container.getWidth(); 


      drawable.setBounds(0, 0, 0 + width, 0 
        + height); 
      return drawable; 
     } catch (Exception e) { 
      return null; 
     } 
    } 

Моя проблема заключается в том, что, когда телефон удерживается в портретной ориентации изображение выглядит хорошо. Однако, когда я поворачиваю телефон, ширина изображения переходит на новую ширину телефона, однако высота не изменяется, поэтому изображение выглядит искаженным.

Есть ли способ сбросить высоту, когда телефон повернут?

Довольно уверен, что это нелепая ошибка где-то

ответ

0

Для обнаружения вращения экрана, вы можете попробовать что-то вроде этого:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

See more.

Адрес another great example.

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