«ScaleType: FIT_XY» не растягивает изображения в Галерее - PullRequest
3 голосов
/ 07 октября 2011

У меня есть галерея в ландшафтном режиме с большим количеством изображений с помощью imageadapter. Я хочу, чтобы изображения растягивались на весь экран по горизонтали, сохраняя соотношение сторон и растягивая столько, сколько нужно по вертикали.
Я попытался использовать FIT_XY, он не помещается по горизонтали, но он не сохраняет соотношение по вертикали (изображения становятся раздавленными)
Как я могу это сделать? Вот пользовательский адаптер изображения:

    public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
int counter = 0;

private final Context mContext;

public String[] mImageIds;

public ImageAdapter(Context c) {
    mContext = c;
    TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery1);
    mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
    a.recycle();
}

public void insert(String string) {
    mImageIds[counter] = string;
    counter++;
}

@Override
public int getCount() {
    return mImageIds.length;
}

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageView i = new ImageView(mContext);

    i.setImageBitmap(BitmapFactory.decodeFile(mImageIds[position]));
    i.setLayoutParams(new Gallery.LayoutParams(WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.FILL_PARENT));
    i.setScaleType(ImageView.ScaleType.MATRIX);
    i.setBackgroundResource(mGalleryItemBackground);

    return i;
}

}

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

когда я делаю это в Android, я использую масштабирование подгонки (fitCenter, fitStart, fitEnd) вместе с настройкой границ вида, атрибуты xml будут, например,

android:scaleType="fitCenter" android:adjustViewBounds="true" 
1 голос
/ 27 октября 2011

Вы можете вычислить пиксели по ширине и высоте и отправить их в setLayoutParams:

int width = getWindowManager().getDefaultDisplay().getWidth();
int height = width * bitmapHeight / bitmapWidth;
imageView.setLayoutParams(new Gallery.LayoutParams(width, height));
imageView.setPadding(6, 0, 6, 0); // set this to what you like
// remove this line:
//imageView.setScaleType(ImageView.ScaleType.MATRIX);

Установка типа масштаба ничего не изменит (за исключением того, что FitXY будет растягиваться горизонтально до границ, но оставитвысота как-то еще, как ты уже говорил).Также FILL_PARENT не работает должным образом.Другие макеты, кажется, влияют на размер растрового изображения (или в моем случае Drawable).

В вашем XML-файле макета вам может потребоваться установить fill_parent:

android:layout_width="fill_parent"
android:layout_height="fill_parent"

Это сработало для менязагрузка и потоковая передача в Drawable, поэтому я думаю, что это будет работать для вашего растрового изображения.

...