【问题标题】:BitmapFactory.decodeFile and ImageView strange thing in AndroidAndroid中的BitmapFactory.decodeFile和ImageView奇怪的东西
【发布时间】:2013-10-22 08:46:18
【问题描述】:

我有一个奇怪的问题 - 它发生在 xperia (android 4.0.3) 上,但不在 samsung S plus (2.3.6) 上。在应用程序中,我正在使用带有支持库的谷歌地图 APIv2(在另一个活动中。不确定是否重要)。

我认为我已将问题范围缩小到:

private Bitmap bitmap;
private String st;
private static final String PHOTO_DIR = "photodir";

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    [...]
    st = Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR  + "/test.jpg";
    bitmap = BitmapFactory.decodeFile(st);
    ImageView im = (ImageView) findViewById(R.id.imv_Photo);
    im.setImageBitmap(bitmap);
    [...]

这按预期工作。但是这个:

@Override
public void onClick(View v)
{
    try
    {
        ImageView im = (ImageView) findViewById(R.id.imv_Photo);
        String st = Environment.getExternalStorageDirectory().toString() + "/" + PHOTO_DIR  + "/test1.jpg";
        Bitmap bitmap = BitmapFactory.decodeFile(st);
        im.setImageBitmap(bitmap);
    }
    catch (Exception e)
    {
        // null
    }
}

即使删除了 im.setImageBitmap(bitmap) 也会挂起应用程序(尽管有 try/catch 块!)。当我注释掉 BitmapFactory.decodeFile 问题消失。更糟糕的是,插入 USB 时 xperia 会卸载 sd 卡,而我还不知道如何将图片写入手机内存,所以我无法检查日志(顺便说一句:以后有办法获取日志吗?)

当我从 onCreate() 中删除代码时,onClick() 只工作一次。我尝试在解码前设置bitmap = null,setImageBitmap(null),但是没有用。

这对我来说似乎很奇怪,因为三星使用相同的代码没有问题。

有什么解决办法还是我做错了什么?

【问题讨论】:

标签: android bitmap android-imageview freeze


【解决方案1】:

做一件事。在传递给解码文件之前对图像进行采样。检查下面的代码

BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 3;


Bitmap bitmap = BitmapFactory.decodeFile(st,options);
    im.setImageBitmap(bitmap);

【讨论】:

猜你喜欢
  • 2017-12-08
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-27
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多