我正在创建一个图像滑块,我知道这会以某种方式发生,因为我使用的图像,我已经尝试android:largeHeap="true"
但我没有运气。
这是我输出图像的适配器代码
public class EsquireAdapter extends PagerAdapter {
private int [] imgs = { R.drawable.conf4,R.drawable.food,R.drawable.food1,R.drawable.food2,R.drawable.conf4,R.drawable.food,R.drawable.food1,R.drawable.food2,R.drawable.escalope,};
private LayoutInflater inflater;
private Context ctxt;
public EsquireAdapter(Context ctxt) {
this.ctxt = ctxt;
}
@Override
public int getCount() {
return imgs.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater)ctxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.swipee,container,false);
ImageView img = (ImageView)v.findViewById(R.id.ImageView);
TextView tv = (TextView)v.findViewById(R.id.textView);
img.setImageResource(imgs[position]);
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.invalidate();
}
}
这是我的logcat:
致命的例外:主要 处理:com.example.moses.ngongapp,PID:21333 java.lang.OutOfMemoryError:无法分配带有16777120个空闲字节的144764940字节分配和27MB直到OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) 在android.graphics.BitmapFactory.nativeDecodeAsset(本机方法) 在android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
答案 0 :(得分:1)
发生这种情况的原因是,由于文件较大,提供给您应用的内存会被图像用尽。
在这种情况下,启用大型堆不会是一个解决方案,因为它只会为您的应用程序提供一些额外的内存来处理,最终也会被耗尽。
您可以在这里尝试的解决方案很少
如果您不想手动编写用于缩放图片的代码,请使用Picasso这样的库。这是一个快速的tutorial on Picasso
Picasso
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.fit()
// call .centerInside() or .centerCrop() to avoid a stretched image
.into(imageViewFit);
Picasso中的.fit()方法可以为您缩放图像。
答案 1 :(得分:1)
我建议您使用名为Glide的库,使用此库在gradle文件中添加以下内容
dependencies {
compile 'com.github.bumptech.glide:glide:3.7.0'
}
然后在res文件夹中创建一个名为drawable-nodpi
的文件夹。将所有图像放在那里
然后在instantiateItem
执行以下操作
@Override
public Object instantiateItem(ViewGroup container, int position) {
inflater = (LayoutInflater)ctxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.swipee,container,false);
ImageView img = (ImageView)v.findViewById(R.id.ImageView);
TextView tv = (TextView)v.findViewById(R.id.textView);
Glide.with(context)
.load(imgs[position])
.asBitmap().transform(new CenterCrop(context))
.diskCacheStrategy( DiskCacheStrategy.NONE )
.skipMemoryCache( true )
.into(img)
container.addView(v);
return v;
}
让我知道它是否有效