【问题标题】:how to load images one after the other in an ImageView instead of a viewflipper?如何在 ImageView 而不是 viewflipper 中一个接一个地加载图像?
【发布时间】:2012-09-01 18:32:23
【问题描述】:

我的项目是显示所选文件夹中图像的幻灯片。

我已经使用 ViewFlipper 完成了这个项目。我遇到的问题是将更多图像加载到取景器时的内存问题。如果文件夹包含超过 15 张图片,我会收到强制关闭错误。

Bitmap mBitmap=BitmapFactory.decodeFile(ImageList.get(i));
    image.setImageBitmap(mBitmap);

    viewFlipper.addView(image);
    System.gc();

    }
    viewFlipper.startFlipping();

如何解决此“内存不足”错误,还有其他解决方法吗? 我在某处听说我们可以使用单个图像视图并在运行时更改图像。关于我如何开始的任何指示? 我还需要设置图像更改之间的时间间隔。

编辑:使用 ImageView 而不是 viewflipper,现在我可以显示单个图像。说 5 秒后如何更改 Imageview 中的图像?我在 onCreate 中实现的代码是:

 ImageView imgView01 = (ImageView) findViewById(R.id.imageView1);  
            File dir = new File("/sdcard/WallpapersHD/");
             File file[]=dir.listFiles();

             for (int i=0;i<file.length;i++) {


                 Drawable d = (Drawable) Drawable.createFromPath(file[i].toString());


                 imgView01.setImageDrawable(d);

【问题讨论】:

  • 如果您从服务器下载图像,那么您在项目中应用了惰性列表概念,它将一次下载一个图像。
  • 不,我的图像存在于 SD 卡的文件夹中。

标签: android viewflipper android-imageview


【解决方案1】:

每次显示新的Bitmap,请在上一张图片上调用recycle()。这将释放内存空间,因此您不会收到与位图相关的窗口泄漏错误。

【讨论】:

  • 由于我使用的是 ViewFlipper,因此无法执行此操作。我收到运行时错误“画布:尝试使用回收的位图 android.graphics.bitmap”并且应用程序强制关闭。
【解决方案2】:

如果您正在寻找使用单个ImageView,那么您必须使用postdelayed()handlers()

在您的onCreate() 中使用此方法,

private Runnable mUpdateTimeTask = new Runnable() {
    public void run() {

        imageView.removeCallbacks(mUpdateTimeTask);
        imageView.postDelayed(this, 1000);
        imageView.setBackgroudRsource(R.drawable.urImage);

    }
};

现在需要时调用这些方法,

    imageView.removeCallbacks(mUpdateTimeTask);
    imageView.postDelayed(mUpdateTimeTask, 1000); //1 sec delay to change images

【讨论】:

  • 我无法让它正常工作。我已经编辑了上面的问题,以提供我到目前为止所做的事情。告诉我如何从那里开始。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多