在活动中显示多个ImageView

时间:2014-02-26 19:14:11

标签: android checkbox crash imageview sos

基本上我的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);
        }
        }
    });

}

}

2 个答案:

答案 0 :(得分:0)

我猜你正在将全尺寸的图像加载到内存中(即使你在较小的imageViews中显示它们)? 如果是这样,我猜这是你的问题。

您可能希望利用BitmapFactory的 inSampleSize 将缩小的图像加载到内存中。

在Android应用中只能使用几MB内存,因此在处理图像时需要非常注意这一点。

请参阅此处的文档:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

答案 1 :(得分:0)

现在查看您的代码和之前的评论我可以看到您可能会遇到内存问题。首先,您希望您的图像显示其所显示的质量。利用Android功能,根据屏幕尺寸将不同质量的图像加载到应用程序中。

同时将所有图像加载一次,然后将它们标记为已消失将使事情变得更加不连贯。你正在使用更多的内存。

由于每层都有一个视图,我猜你会有一张覆盖整个披萨的图片。你可以拥有一个图像并重新绘制多次(这会减少需要加载的内存量并仍然呈现相同的图像)。我的意思是,意大利辣香肠披萨有一个意大利辣香肠,并在披萨上多次涂上意大利辣香肠图像,而不是在其中有一个像20个意大利辣香肠片的图像。这将大大提高图像加载的速度。