我有一个显示图像的问题,我用三星Galaxy Captivate i897测试我的程序,所以,问题是我想显示图像,我用ViewPager做这个,但ViewPager实例化总是三个图像(方法instantiateItem),之前,显示和之后的图像,我的图像都是5MB,所以LogCat给了我那个错误
01-29 11:35:48.656:E / dalvikvm-heap(1275):19660800字节的外部分配对于此过程来说太大了。 01-29 11:35:48.679:E / GraphicsJNI(1275):VM不允许我们分配19660800字节
我想知道如何避免实例化3个图像中的某些图像或如何创建imageView以避免此问题。
这是我的适配器代码。
公共类FullScreenImageViewAdapter扩展了PagerAdapter {
private final Activity _activity;
private final ArrayList<String> _imagePaths;
// constructor
public FullScreenImageViewAdapter(Activity activity,
ArrayList<String> imagePaths)
{
this._activity = activity;
this._imagePaths = imagePaths;
}
@Override
public int getCount()
{
return this._imagePaths.size();
}
@Override
public boolean isViewFromObject(View view, Object object)
{
return view == ((RelativeLayout) object);
}
@Override
public Object instantiateItem(ViewGroup container, int position)
{
LayoutInflater inflater = (LayoutInflater) _activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewLayout = inflater.inflate(R.layout.img_view, container, false);
TouchImageView imgDisplay = (TouchImageView) viewLayout
.findViewById(R.id.imgDisplay);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(_imagePaths.get(position),
options);
imgDisplay.setImageBitmap(bitmap);
((ViewPager) container).addView(viewLayout);
return viewLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object)
{
((ViewPager) container).removeView((RelativeLayout) object);
}
}
答案 0 :(得分:1)
使用位图选项压缩图像并对示例大小检查此链接
http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
答案 1 :(得分:0)
内存限制总是难以解决。
如果子采样不适用,您可以尝试通过更改原始ImageView(可能是ViewPager或两者)来按需加载图像以检查其可见性,并在未压缩的图像数据不可见时丢弃它们,如果可见则将其解码回来。对于速度,您可以将压缩图像存储在内存中,并按需解码。
答案 2 :(得分:0)
由于您的图像是JPEG,因此您可以使用RGB_565格式,因为您不需要显示带有Alpha通道的图像(如png)。
options.inPreferredConfig = Bitmap.Config.RGB_565;
这将导致您的图像需要并使用更少的内存,因为每个像素是2个字节(而不是ARGB_8888中的4个字节)
更多信息:http://developer.android.com/reference/android/graphics/Bitmap.Config.html