gpt4 book ai didi

java - 包含图像和文本的 ListView 内存不足异常

转载 作者:行者123 更新时间:2023-12-01 12:58:22 24 4
gpt4 key购买 nike

由于 ListView 内部有一个 ImageView 和 2 个 TextView,我的应用程序内存不足。这些图像很大,我在 ListView 的 single_row.xml 中将它们缩小到 56x56dp,但它们也在其他屏幕上以更大的尺寸使用。

MainActivity 将 single_row 调用到 ListView 中并对其进行扩充。然后,将单行复制为每行的单独内容。每行都有一个图像和 2 个 TextView 。我知道有一种使用位图的方法,但我不确定如何在代码中实现它。

这是主要的activity.java代码

@Override public View getView(int i, View convertView, ViewGroup viewGroup) {
View row=convertView;
if(row==null){
LayoutInflater inflater= (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.single_row, viewGroup,false);
}
TextView title = (TextView) row.findViewById(R.id.textView);
TextView description = (TextView)row.findViewById(R.id.textView2);
ImageView image = (ImageView)row.findViewById(R.id.imageView);

SingleRow temp=list.get(i);
title.setText(temp.title);
description.setText(temp.description);
image.setImageResource(temp.image);

return row;
}

这是singlerow.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="56dp"
android:layout_height="56dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_margin="10dp"
android:src="@drawable/placeholder1" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/imageView"
android:layout_toRightOf="@+id/imageView"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imageView"
android:layout_alignLeft="@+id/textView"
android:layout_alignParentRight="true"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>`

任何解决方案都会有帮助。我不确定如何在这个特定结构中实现它。

最佳答案

正如 Karakuri 所说,将 ImageView 大小限制为 56dpx56dp 并不意味着不加载整个位图。首先从文件(或资源)加载位图,然后缩小它。使用

//For resource
image.setImageBitmap(decodeSampledBitmapFromResource("android.resource://com.my.package/drawable/image_name"));
//For file
image.setImageBitmap(decodeSampledBitmapFromResource(filepath));


public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {

final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 2;
if (height >= reqHeight || width >= reqWidth) {
inSampleSize *= 2;
}
return inSampleSize;
}

public static Bitmap decodeSampledBitmapFromResource(String file,
int reqWidth, int reqHeight) {

final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(file, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(file, options);
}

关于java - 包含图像和文本的 ListView 内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com