2013-07-19 8 views
0

Это мой файл макетаКак масштабировать ширину ImageView

<LinearLayout ... 
<ImageView 
    android:id="@+id/feed_image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:adjustViewBounds="true" 
    android:contentDescription="@string/image_content_description" /> 

Но ImageView ширина не матч родительского ширина. (ширина ширина изображения)

Источник изображения загружен Ленивая загрузка с URL-адреса.

Как увеличить ширину изображения без изображения источника изображения?

Я хочу

Ширина = матч (или заполнить) родителя.

Height = автоматически масштабируются

+0

http://developer.android.ком/ссылки/Android/виджет/ImageView.html # attr_android: scaleType. использовать андроид: атрибут scaleType – Raghunandan

+0

дать соответствующий вес по ширине и сделать высоту в виде оболочки – dhams

ответ

5

Вы можете достичь этого двух способов :

  1. Если изображение больше, чем ImageView вы можете использовать XML только

    <ImageView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:scaleType="fitCenter" 
        android:adjustViewBounds="true"/> 
    
  2. Если изображение меньше ImageView

    <ImageView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:scaleType="fitXY" 
        android:adjustViewBounds="true"/> 
    

Со вторым вариантом, вы должны измерить ширину и высоту изображения и установить высоту ImageView в вашем коде, в соответствии с фактической шириной зрения изображения (то же самое отношение).

0

Если вы хотите, чтобы поместить изображение в вид использования андроида: scaleType = "fitXY"

1
  1. Вы можете использовать android:scaletype="fitXY" свойство imageview

    2.default Android масштабирует ваше изображение вниз, чтобы соответствовать ImageView, mainta с учетом соотношения сторон. Однако убедитесь, что вы устанавливаете изображение в ImageView с помощью андроида: src = "...", а не андроид: background = "...". src = заставляет масштабировать соотношение сторон изображения, но background = делает масштаб и искажает изображение, чтобы он соответствовал размеру ImageView. (Вы можете использовать фон и источник, в то же время, хотя, что может быть полезно для таких вещей, как отображать рамку вокруг основного изображения, используя только один ImageView.)

0

Вы можете добиться этого с этим, создать новую AspectRatioImageView, расширяющий ImageView:

public class AspectRatioImageView extends ImageView { 

    public AspectRatioImageView(Context context) { 
     super(context); 
    } 

    public AspectRatioImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     Drawable drw = getDrawable(); 
     if (null == drw || drw.getIntrinsicWidth() <= 0) { 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     } else { 
      int width = MeasureSpec.getSize(widthMeasureSpec); 
      int height = width * drw.getIntrinsicHeight()/drw.getIntrinsicWidth(); 
      setMeasuredDimension(width, height); 
     } 
    } 
} 

А потом в макете использования XML:

<my.app.AspectRatioImageView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/ar_imageview"/> 
0
<ImageView 
    android:id="@+id/idImage" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scaleType="fitXY"/> 

вычислить высоту в соответствии с аспектом что вы хотите

Display display = getActivity().getWindowManager().getDefaultDisplay(); 
    int height = (display.getWidth() * 9) /16; // in this case aspect ratio 16:9 

    ImageView image = (ImageView) findViewById(R.id.idImage); 
    image.getLayoutParams().height = height; 
Смежные вопросы