Как увеличить размер изображения в Android - PullRequest
5 голосов
/ 17 января 2012

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

enter image description here

public class Gallery2DemoActivity extends Activity {
private Gallery gallery,gallery1;
private ImageView imgView;

private Integer[] Imgid = {
    R.drawable.a_1, R.drawable.a_2, R.drawable.a_3, R.drawable.a_4, R.drawable.a_5, R.drawable.a_6, R.drawable.a_7
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

gallery = (Gallery) findViewById(R.id.examplegallery);
gallery.setAdapter(new AddImgAdp(this));

gallery1 = (Gallery)findViewById(R.id.examplegallery1);
gallery1.setAdapter(new AddImgAdp(this));

imgView = (ImageView)findViewById(R.id.ImageView01);    
imgView.setImageResource(Imgid[0]);


 gallery.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        imgView.setImageResource(Imgid[position]); 
    }
});

}

public class AddImgAdp extends BaseAdapter {
int GalItemBg;
private Context cont;

public AddImgAdp(Context c) {
    cont = c;
    TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
    GalItemBg =  typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);
    typArray.recycle();
}

public int getCount() {
    return Imgid.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imgView = new ImageView(cont);

    imgView.setImageResource(Imgid[position]);
    imgView.setLayoutParams(new Gallery.LayoutParams(110, 100));
    imgView.setScaleType(ImageView.ScaleType.FIT_XY);
    imgView.setBackgroundResource(GalItemBg);

    return imgView;
}
}

Это мой основной XML-файл.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Gallery
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/examplegallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<ImageView
    android:id="@+id/ImageView01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:layout_weight="1"/>
<Gallery
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/examplegallery1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

Нижефайл моих атрибутов:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="GalleryTheme">
    <attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>

Ответы [ 4 ]

3 голосов
/ 17 января 2012

Vinner,

Проблема здесь действительно состоит из двух проблем:

  1. Размер ImageView основан на родительском элементе, что означает, что он разделяет его ширину и высота.

  2. Размер изображения изменяется в соответствии с наиболее ограничивающим размером (шириной).

Самый простой способсправиться с этим, чтобы установить ScaleType для ImageView.Существует несколько типов масштабирования, но вам, вероятно, понадобится Center Crop .В коде это делается view_name.setScaleType(ImageView.ScaleType.CENTER_CROP).Вы также можете сделать это в XML для вашего ImageView с атрибутом android:scaleType="centerCrop".Имейте в виду, что это изменит размер вашего Image и сохранит ваше соотношение сторон, но оно обрежет стороны.

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

Надеюсь, это поможет,

FuzzicalLogic

1 голос
/ 17 января 2012

Вы попробуете ниже код ...?

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Gallery
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/examplegallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1" />
<ImageView
android:id="@+id/ImageView01"
android:layout_width="fill_parent"
android:layout_height="0dp" 
android:src="@drawable/ic_launcher"
android:layout_weight="1"/>
<Gallery
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/examplegallery1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1"/>
</LinearLayout>

и если это не сработает, попробуйте установить высоту вашей галереи на некоторое значение dp, это сработает .. Спасибо

0 голосов
/ 31 мая 2012

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

0 голосов
/ 17 января 2012

Похоже, в классе AddImgAdp вы устанавливаете высоту и ширину ImageView для определенных размеров пикселей.

imgView.setLayoutParams(new Gallery.LayoutParams(110, 100)); //width = "110px", height="100px"

Лично я бы поставил макет как RelativeLayout, выровнял первую галерею по верху, вторую галерею по низу, и установил ImageView для выравнивания над второй галереей. Затем сделайте изображение:

imgView.setLayoutParams( new Gallery.LayoutParams(
   Gallery.LayoutParams.FILL_PARENT, 
   Gallery.LayoutParams.FILL_PARENT) );

Если вы установите ImageView для fill_parent с LinearLayout, он заполнится до нижней части экрана, а вторая галерея будет за кадром.

Также знайте, что, заполнив все пространство, вы, скорее всего, исказите изображение. Рассмотрим все варианты изменения размера: http://developer.android.com/reference/android/widget/ImageView.ScaleType.html

...