Abh*_*tel 1 android listview scroll
我提到了许多资源,但无法得到正确答案,
我已经制作了一个自定义适配器来查看列表视图中的图像.从存储卡中检索此图像.一切运行正常,但当我滚动列表视图时,我得到一个OutOfMemory异常.我发布了代码,使用它从sdcard中检索图像.
public void getFromSdcard() {
File file = new File(
android.os.Environment.getExternalStorageDirectory(),
"Tiles/.NoMedia");
if (file.isDirectory()) {
listFile = file.listFiles();
for (int i = 0; i < listFile.length; i++) {
f.add(listFile[i].getAbsolutePath());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里f是字符串的arraylist,我将它传递给自定义适配器以下是我的自定义适配器的代码.
public class NewImageAdapter extends ArrayAdapter<Image> {
private ArrayList<Image> objects;
String packageName;
Activity act;
public NewImageAdapter(Activity context, int image_layout,
ArrayList<Image> objects) {
super(context, image_layout, objects);
this.act = context;
this.objects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.list_item, null);
}
Image i = objects.get(position);
if (i != null) {
ImageView iv = (ImageView) v.findViewById(R.id.imagemenu123);
// TextView tv = (TextView) v.findViewById(R.id.commandText);
if (iv != null) {
Bitmap myBitmap = BitmapFactory.decodeFile(i.getImagePath());
iv.setImageBitmap(myBitmap);
// iv.setImageBitmap(i.getImageBitmap());
// tv.setText("Tiles Images");
}
}
return v;
}
Run Code Online (Sandbox Code Playgroud)
}
我的问题的任何解决方案:
使用此概念这将对您有所帮助,之后在图像视图上设置imagebitmap
public static Bitmap convertBitmap(String path) {
Bitmap bitmap=null;
BitmapFactory.Options bfOptions=new BitmapFactory.Options();
bfOptions.inDither=false; //Disable Dithering mode
bfOptions.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared
bfOptions.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
bfOptions.inTempStorage=new byte[32 * 1024];
File file=new File(path);
FileInputStream fs=null;
try {
fs = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if(fs!=null)
{
bitmap=BitmapFactory.decodeFileDescriptor(fs.getFD(), null, bfOptions);
}
} catch (IOException e) {
e.printStackTrace();
} finally{
if(fs!=null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return bitmap;
}
Run Code Online (Sandbox Code Playgroud)
如果你想从高大和宽度如60和60的大图像中制作一个小图像并快速滚动列表视图,那么使用这个概念
public static Bitmap decodeSampledBitmapFromPath(String path, int reqWidth,
int reqHeight) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
Bitmap bmp = BitmapFactory.decodeFile(path, options);
return bmp;
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
inSampleSize = Math.round((float) height / (float) reqHeight);
} else {
inSampleSize = Math.round((float) width / (float) reqWidth);
}
}
return inSampleSize;
}
Run Code Online (Sandbox Code Playgroud)
我希望它会对你有所帮助.
您可以从开发者网站获取帮助 Here
归档时间: |
|
查看次数: |
6803 次 |
最近记录: |