Android 图像裁剪以适应GridView

Android 图像裁剪以适应GridView,android,image,gridview,crop,Android,Image,Gridview,Crop,我需要在GridView中显示三列ImageView,我希望将图像平方以避免这种效果 这是我的xml代码: <?xml version="1.0" encoding="utf-8"?> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/grid_view" android:layout_width="match_parent" andr


我需要在GridView中显示三列ImageView,我希望将图像平方以避免这种效果

这是我的xml代码:

<?xml version="1.0" encoding="utf-8"?>

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

</GridView>

和适配器:

public class PhotoListAdapter extends ArrayAdapter<Photo> {

Context context;

// Constructor
public PhotoListAdapter(Context context, ArrayList<Photo> mPhotoList) {
    super(context, R.layout.item_album_detail, mPhotoList);
    this.context = context;
}

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

    // Inflating
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = inflater.inflate(R.layout.item_album_detail, parent, false);

    // Linking view by id
    ImageView pic = (ImageView) convertView.findViewById(R.id.current_img);

    // Get current item
    Photo item = getItem(position);

    // Set widget
    pic.setScaleType(ImageView.ScaleType.CENTER_CROP);
    ImageDownloader imgd = new ImageDownloader(pic);
    imgd.execute(item.getPhoto_m());

    return convertView;
}

}
公共类PhotoListAdapter扩展了ArrayAdapter{
语境;
//建造师
公共PhotoListAdapter(上下文,ArrayList mPhotoList){
超级(上下文、右布局、项目、相册、mPhotoList);
this.context=上下文;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//膨胀
LayoutInflater充气器=(LayoutInflater)getContext().getSystemService(Context.LAYOUT\u充气器\u SERVICE);
convertView=充气机。充气(R.layout.item\u album\u详细信息,父项,false);
//按id链接视图
ImageView pic=(ImageView)convertView.findViewById(R.id.current\u img);
//获取当前项目
照片项目=获取项目(位置);
//设置小部件
pic.setScaleType(ImageView.ScaleType.CENTER\U裁剪);
ImageDownloader imgd=新的ImageDownloader(pic);
execute(item.getPhoto_m());
返回视图;
}
}
在item_album_detail.xml中只有一个ImageView

<ImageView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:contentDescription="@string/desc"
  android:id="@+id/current_img"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:adjustViewBounds="true" />


我希望获得此

更改天平类型将解决您的问题。但这些图像可能看起来有些夸张

pic.setScaleType(ImageView.ScaleType.FIT_XY)


更改比例类型将解决您的问题。但这些图像可能看起来有些夸张

pic.setScaleType(ImageView.ScaleType.FIT_XY)


可以尝试以编程方式更改相对布局中图像视图的大小吗。我必须这样做才能得到瓷砖(相同尺寸)


可以尝试以编程方式更改相对布局中图像视图的大小吗。我必须这样做才能得到瓷砖(相同尺寸)


或者他也可以使用类似形式的ImageView.ScaleType.CENTER\u CROP,如果他希望将大部分图像都放在那里,但要剪掉不适合空间的其余部分。对。看起来,他正在使用正确的刻度类型来表示他所链接的内容,正如他在第二眼后所想的那样。我会重读这篇文章。我认为一些图片的大小比imageview的小。这就是它看起来更小的原因。否则,中心裁剪应该已经达到了他的目的。或者,如果他希望将大部分图像都放在那里,他可以使用类似形式的ImageView.ScaleType.CENTER\u裁剪,但将不适合空间的其余部分切掉。对。看起来,他正在使用正确的刻度类型来表示他所链接的内容,正如他在第二眼后所想的那样。我会重读这篇文章。我认为一些图片的大小比imageview的小。这就是它看起来更小的原因。否则的话,中央作物就应该达到他的目的。
    DisplayMetrics displaymetrics = new DisplayMetrics();
    mActivity.getWindowManager().getDefaultDisplay()
            .getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels / 2
            - (int) convertDpToPixel(1);
    int width = displaymetrics.widthPixels / 2 - (int) convertDpToPixel(1);

    iv1.setLayoutParams(new RelativeLayout.LayoutParams(width,
            height));
    iv2.setLayoutParams(new RelativeLayout.LayoutParams(width,
            height));
    iv3.setLayoutParams(new RelativeLayout.LayoutParams(width,
            height));
    iv4.setLayoutParams(new RelativeLayout.LayoutParams(width,
            height));