1

I'm trying to implement a basic GridView gallery as per the Android Developer Guide/Tutorial.

The ImageViews inside my grid are Bitmaps taken from a user's camera.

This works fine except for the fact that my images are incredibly small.

My xml:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <GridView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/gridview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnWidth="90dp"
            android:numColumns="auto_fit"
            android:verticalSpacing="10dp"
            android:horizontalSpacing="10dp"
            android:stretchMode="columnWidth"
            android:gravity="center"
            />

</LinearLayout>

My ImageAdapter

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    private ArrayList<Bitmap> imgs;

    public ImageAdapter(Context c, ArrayList<Bitmap> arrayList) {
        mContext = c;
        imgs = arrayList;
    }

    public int getCount() {
        return imgs.size();
    }

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

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

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageBitmap(imgs.get(position));
        return imageView;
    }

}

I've tried various things to fix this issue, but the only one that seems to work is adjusting the ImageView's layout params to enormous numbers (e.g. GridView.LayoutParams(300, 300)). However, even if I do this, my images are still relatively small (i.e. nowhere near 300dp x 300dp).

Any idea what I'm doing wrong?

u2fan
  • 121
  • 1
  • 9

5 Answers5

2

Put this param in your ImageView.

android:adjustViewBounds="true"

You can see this too.

How to find cell width from StaggeredGridLayoutManager?

Community
  • 1
  • 1
Chaudhary Amar
  • 836
  • 8
  • 20
2

Setting layout params in my adapter to GridView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)) managed to fix the issue.

Found this solution at GridView items are too small - Android

Community
  • 1
  • 1
u2fan
  • 121
  • 1
  • 9
0

Try to change for bigger size:

android:columnWidth="90dp"
Android Android
  • 724
  • 1
  • 7
  • 20
0

you should accept the answer of

android:adjustViewBounds="true"

What it means?it stretches your image to fit the height and width of your image view so they won't be small,but why you don't want to use

android:ScaleType="fitXY"?

Because first option adjusted the proportion of your image so it won't lose the quality and second one anyway stretches it and it loses quality! IMPORTANT:be aware that if image will be too small,adjust option will not work as it must save the image proportion,so its all up to you what you want to use!

Android Developer
  • 673
  • 1
  • 7
  • 19
0

The problem is that new GridView.LayoutParams() expect args in pixels.

So, your need to convert 85 from dp to pixels first.

Anton Malmygin
  • 3,406
  • 2
  • 25
  • 31