Android 项目中不能显示两张以上图片

public class MainActivity extends Activity {

private ImageView[] img=new ImageView[4];//声明一个保存ImageView组件的数组
private int[] imagePath= new int[]{R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04};//声明并初始化一个保存访问图片的数组

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout=(LinearLayout) findViewById(R.id.layout); //获取XML文件中定义的线性布局管理器
for (int i=0;i {
img[i]=new ImageView(this);//新创建一个ImageView组件
img[i].setImageResource(imagePath[i]);//设置要显示的图片
img[i].setPadding(5, 5, 5, 5);//设置ImageView显示的内边距
LayoutParams params=new LayoutParams(80,40);//设置图片的宽和高
img[i].setLayoutParams(params);//为ImageView组件设置布局参数
layout.addView(img[i]);//将ImageView组件添加到布局管理器中
}
}
}
我建立的安卓4.2.2上的项目,但是上边的程序运行一直出错。如果把img长度设置为2,然后imagePath初始化为四个图片中的任何两个,就会成功了。请大神们指点是为什么?
下边是我的布局文件内容

xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/background"
android:id="@+id/layout"
tools:context="${relativePackage}.${activityClass}"
>

2个回答

现已经找到了此问题的最终原因,因为setImageResource在运行时,会自动匹配相应质量的图片,而且之后也没有及时的资源回收机制,所以导致在加载第三张图片的时候,内存溢出报错(我建立的AVD所分配的内存比较小)。重新建立一个AVD4.0.3,并且把内存改为512M,就不会报错了。如果非要针对内存比较小的Android,或者说是为了节约资源,就尽量不要用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。

你的错误是什么,设置一下imageview的scaletype,然后layout.addView(img[i],param)试试

Jason_White
Jason_White 但是所有的文件都是能够找到的,而且四张图片,任意两个都是能够显示出来的,只要一多于两个,就会报错。
接近 6 年之前 回复
Jason_White
Jason_White 报的错误时找不到这个文件,我调试了,发现循环中档i=2的时候,img[i].setImageResource(imagePath[i])会报错。
接近 6 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐