基本上我的android活动会显示一个披萨,其中包含4个不同的浇头,由4个imageview代表彼此,并且其可见性设置为已消失。选中时有4个复选框,通过将其设置为可见来显示相应的图像视图。然而,应用程序每次都在模拟器上崩溃,只有当我将imageview缩小到2时,活动才能顺利运行。 我设法创建了3个imageview而没有崩溃,但所有的imageview都是低质量的,应用程序有非常明显的滞后。那么你如何创建一个像我这样的应用程序,在不牺牲图像质量的情况下显示多个图像视图,以节省内存和滞后?
这是我的代码:
公共类MainActivity扩展了Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CheckBox extracheese = (CheckBox) findViewById(R.id.checkBox1);
CheckBox pineapple = (CheckBox) findViewById(R.id.checkBox2);
CheckBox chicken = (CheckBox) findViewById(R.id.checkBox3);
CheckBox seafood = (CheckBox) findViewById(R.id.checkBox4);
extracheese.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
ImageView extracheesee = (ImageView)findViewById(R.id.imageView2);
if(((CheckBox) v).isChecked()){
extracheesee.setVisibility(View.VISIBLE);
}else{
extracheesee.setVisibility(View.GONE);
}
}
});
pineapple.setOnClickListener(new OnClickListener() {
public void onClick(View vi) {
ImageView extracheeseee = (ImageView)findViewById(R.id.imageView2);
if(((CheckBox) vi).isChecked()){
extracheeseee.setVisibility(View.VISIBLE);
}else{
extracheeseee.setVisibility(View.GONE);
}
}
});
chicken.setOnClickListener(new OnClickListener() {
public void onClick(View vi) {
ImageView extracheeseee = (ImageView)findViewById(R.id.imageView3);
if(((CheckBox) vi).isChecked()){
extracheeseee.setVisibility(View.VISIBLE);
}else{
extracheeseee.setVisibility(View.GONE);
}
}
});
}
}
答案 0 :(得分:0)
我猜你正在将全尺寸的图像加载到内存中(即使你在较小的imageViews中显示它们)? 如果是这样,我猜这是你的问题。
您可能希望利用BitmapFactory的 inSampleSize 将缩小的图像加载到内存中。
在Android应用中只能使用几MB内存,因此在处理图像时需要非常注意这一点。
请参阅此处的文档:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
答案 1 :(得分:0)
现在查看您的代码和之前的评论我可以看到您可能会遇到内存问题。首先,您希望您的图像显示其所显示的质量。利用Android功能,根据屏幕尺寸将不同质量的图像加载到应用程序中。
同时将所有图像加载一次,然后将它们标记为已消失将使事情变得更加不连贯。你正在使用更多的内存。
由于每层都有一个视图,我猜你会有一张覆盖整个披萨的图片。你可以拥有一个图像并重新绘制多次(这会减少需要加载的内存量并仍然呈现相同的图像)。我的意思是,意大利辣香肠披萨有一个意大利辣香肠,并在披萨上多次涂上意大利辣香肠图像,而不是在其中有一个像20个意大利辣香肠片的图像。这将大大提高图像加载的速度。