将图像调整到网格视图中

时间:2016-05-11 23:38:35

标签: android image user-interface gridview imageview

我正在尝试将图像放入gridview中。但我不明白我的gridview在哪里获得了视图的高度。

网格视图的单元格小于图像。我想在单元格中显示图像。但我不想硬编码ImageView的大小。

我的代码

xml中的gridView

<GridView
    android:id="@+id/gridview_movie_list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:numColumns="auto_fit"
    android:columnWidth="185dp"
    android:stretchMode="columnWidth"/>

我正在膨胀的我的ImageView。

 <ImageView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:scaleType="centerCrop"/>

我的适配器类中的getView方法

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
            mContext.LAYOUT_INFLATER_SERVICE);
    ImageView imageView;

    if (convertView == null) {
        imageView = (ImageView) inflater.inflate(R.layout.grid_view_item, null);
    } else {
        imageView = (ImageView) convertView;
    }

    Picasso.with(mContext).setLoggingEnabled(false);
    Picasso.with(mContext)
            .load(imageResource[position])
            .into(imageView);

    return imageView;
}

这就是我得到的

This is what I get

这就是所需要的

enter image description here

4 个答案:

答案 0 :(得分:6)

对我有用的是将此行添加到我的图像视图xml。

android:adjustViewBounds="true"

现在我的输出就像我想要的那样。 感谢每一个人的帮助

答案 1 :(得分:0)

您是否尝试过在getView覆盖方法中添加参数:

imageView.setScaleType(ImageView.ScaleType.CENTER); // Replace default CENTER_CROP
// Try ScaleType.CENTER or ScaleType.CENTER_INSIDE
imageView.setPadding(8, 8, 8, 8); // why not be explicit about the padding while we're at it

好的&#39; docs也会有所帮助:

答案 2 :(得分:0)

在ImageView上尝试fitXy,它会尝试适应边缘而不减少像素

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

答案 3 :(得分:0)

这是您的Gridview添加到gridview.xml

<GridView
    android:id="@+id/clueGrid"
    android:layout_width="280dp"
    android:layout_height="match_parent"
    android:layout_below="@id/gameInstructions"
    android:layout_centerHorizontal="true"
    android:horizontalSpacing="20dp"
    android:verticalSpacing="20dp"
    android:paddingTop="10dp"
    android:numColumns="2"
    />

将此添加到另一个xml - &gt; grid_view_image.xml

<com.XXXX.view.SquareRelativeLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:background="@drawable/grid_item_background"
   android:layout_width="match_parent"
   android:layout_height="match_parent">

<ImageView
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:src="@drawable/clue_found"
    android:layout_alignParentRight="true"
    android:layout_marginRight="10dp"
    android:layout_marginBottom="10dp"
    android:layout_alignParentBottom="true"
    android:id="@+id/itemView"/>

</com.XXXX.view.SquareRelativeLayout>

并且xml使用SquareRelativeLayout添加此Java

public class SquareRelativeLayout extends RelativeLayout {

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

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }
}

然后现在需要创建适配器

公共类ItemGridAdapter扩展了BaseAdapter {

List<Item> itemList;

public ItemGridAdapter(List<Item> itemList){
    this.itemList = itemList;
}

@Override
public int getCount() {
    return itemList.size();
}

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

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null){
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        convertView = inflater.inflate(R.layout.grid_view_image, parent, false);
    }
    final ImageView itemView = (ImageView) convertView.findViewById(R.id.itemView);
    itemView.setImageDrawable("YOUR DRAWABLE");
    return convertView;
}
}

然后在使用gridview.xml

的主类上
ItemGridAdapter itemGridAdapter = new ItemGridAdapter(itemList);
itemGrid.setAdapter(itemGridAdapter);

然后你可以只使用你的ImageView和布局。 HopeFully这有帮助!!

我看到你使用Picasso这是我对适配器设置图像的答案:

   Target target = new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                itemView.setImageBitmap(bitmap);
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
                // Meh
            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
                // Meh
            }
        };

    Picasso.with(convertView.getContext())
                .load(imageUrl)
                .into(target);