自定义 ListView,其中所有图像都具有相同的大小
Custom ListView where all the images have the same size
我想创建一个 ListView
,其中每一行都有一个矩形图像和一些文本。像这样:
我遇到的问题是有些图像的高度高于宽度,然后 ListView
看起来像这样:
这是我的实际代码:
xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
android:id="@+id/resultItem">
<ImageView
android:id="@+id/spicture"
android:layout_width="97dp"
android:layout_height="60dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:layout_marginTop="3dp" >
</ImageView>
<TextView
android:id="@+id/sname"
style="@android:style/TextAppearance.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
自定义适配器如下所示:
public class ListViewAdapter extends BaseAdapter {
private final Context mContext;
private ArrayList<Integer> imageId;
private ArrayList<String> textStr;
private final LayoutInflater inflater;
private static class ViewHolder {
ImageView imgView;
TextView txtView;
}
public ListViewAdapter(Context c) {
mContext = c;
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return imageId.size();
}
@Override
public Object getItem(int position) {
return textStr.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/**
* Rep per parametre un array amb els identificadors de les imatges i els
* string dels textes a mostrar
*
* @param idImages
* @param strText
*/
public void setData(ArrayList<String> strText, ArrayList<Integer> idImages) {
imageId = idImages;
textStr = strText;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.result_item, null);
holder.imgView = (ImageView) convertView.findViewById(R.id.spicture);
holder.txtView = (TextView) convertView.findViewById(R.id.sname);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromResource(mContext.getResources(), imageId.get(position), 50, 50);
holder.imgView.setImageBitmap(bitmap);
holder.txtView.setText(textStr.get(position));
holder.txtView.setGravity(Gravity.CENTER);
return convertView;
}
}
我怎样才能让所有的图片都变成相同大小的矩形?
要么在设置为 listViewItem 之前裁剪图像。或者你只是使用相同比例的图像。
但我假设您正在寻找更简单的解决方案。只需添加 scaleType="centerCrop"
<ImageView
android:id="@+id/spicture"
android:scaleType="centerCrop"
android:layout_width="97dp"
android:layout_height="60dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:layout_marginTop="3dp" >
您可以在此处找到有关 scaleTypes
的更多信息:http://www.techrepublic.com/article/clear-up-ambiguity-about-android-image-view-scale-types-with-this-guide/
注意 fitXY 会缩放以适合,但原始比例会丢失。
将此 android:scaleType="fitXY"
用于 ImageView
尝试下面的代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
android:id="@+id/resultItem">
<ImageView
android:id="@+id/spicture"
android:layout_width="97dp"
android:layout_height="60dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:layout_marginTop="3dp" >
</ImageView>
<TextView
android:id="@+id/sname"
style="@android:style/TextAppearance.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
我想创建一个 ListView
,其中每一行都有一个矩形图像和一些文本。像这样:
我遇到的问题是有些图像的高度高于宽度,然后 ListView
看起来像这样:
这是我的实际代码:
xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
android:id="@+id/resultItem">
<ImageView
android:id="@+id/spicture"
android:layout_width="97dp"
android:layout_height="60dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:layout_marginTop="3dp" >
</ImageView>
<TextView
android:id="@+id/sname"
style="@android:style/TextAppearance.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
自定义适配器如下所示:
public class ListViewAdapter extends BaseAdapter {
private final Context mContext;
private ArrayList<Integer> imageId;
private ArrayList<String> textStr;
private final LayoutInflater inflater;
private static class ViewHolder {
ImageView imgView;
TextView txtView;
}
public ListViewAdapter(Context c) {
mContext = c;
inflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return imageId.size();
}
@Override
public Object getItem(int position) {
return textStr.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
/**
* Rep per parametre un array amb els identificadors de les imatges i els
* string dels textes a mostrar
*
* @param idImages
* @param strText
*/
public void setData(ArrayList<String> strText, ArrayList<Integer> idImages) {
imageId = idImages;
textStr = strText;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.result_item, null);
holder.imgView = (ImageView) convertView.findViewById(R.id.spicture);
holder.txtView = (TextView) convertView.findViewById(R.id.sname);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromResource(mContext.getResources(), imageId.get(position), 50, 50);
holder.imgView.setImageBitmap(bitmap);
holder.txtView.setText(textStr.get(position));
holder.txtView.setGravity(Gravity.CENTER);
return convertView;
}
}
我怎样才能让所有的图片都变成相同大小的矩形?
要么在设置为 listViewItem 之前裁剪图像。或者你只是使用相同比例的图像。
但我假设您正在寻找更简单的解决方案。只需添加 scaleType="centerCrop"
<ImageView
android:id="@+id/spicture"
android:scaleType="centerCrop"
android:layout_width="97dp"
android:layout_height="60dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:layout_marginTop="3dp" >
您可以在此处找到有关 scaleTypes
的更多信息:http://www.techrepublic.com/article/clear-up-ambiguity-about-android-image-view-scale-types-with-this-guide/
注意 fitXY 会缩放以适合,但原始比例会丢失。
将此 android:scaleType="fitXY"
用于 ImageView
尝试下面的代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
android:id="@+id/resultItem">
<ImageView
android:id="@+id/spicture"
android:layout_width="97dp"
android:layout_height="60dp"
android:layout_marginBottom="3dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:adjustViewBounds="true"
android:layout_marginTop="3dp" >
</ImageView>
<TextView
android:id="@+id/sname"
style="@android:style/TextAppearance.Large"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>