BitmapDrawable无法解码

时间:2013-11-13 01:34:03

标签: android

我正在努力为游戏创建一个健康栏并将其失败:提前致谢!

    //there a corresponding ImageView in the layout
    healthLevel = (ImageView) findViewById(R.id.healthbar);
    BitmapDrawable bitmapDrawable = new BitmapDrawable(getResources(), "res/drawable/health.png");

    //vertical bar cropped from top
    clipDrawable = new ClipDrawable(bitmapDrawable, Gravity.BOTTOM, ClipDrawable.VERTICAL);  
    healthLevel.setImageDrawable(clipDrawable);

    HelperClass.setHealth();
    clipDrawable.setLevel(10000);
    clipDrawable.invalidateSelf();

日志:

11-12 19:32:46.272: W/BitmapDrawable(10524): BitmapDrawable cannot decode res/drawable/health.png

解决方案:

    //there a corresponding ImageView in the layout
    healthLevel = (ImageView) findViewById(R.id.healthbar);
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.health);

    //Convert Bitmap to Drawable
    Drawable bitmapDrawable = new BitmapDrawable(getResources(),bmp); 

    //vertical bar cropped from top
    clipDrawable = new ClipDrawable(bitmapDrawable, Gravity.BOTTOM, ClipDrawable.VERTICAL);  
    healthLevel.setImageDrawable(clipDrawable);

    HelperClass.setHealth();
    clipDrawable.setLevel(10000);
    clipDrawable.invalidateSelf();

1 个答案:

答案 0 :(得分:1)

关于您的问题,从文件路径创建BitmapDrawable需要文件的绝对存储路径,而不是应用包的相对路径。

我已经尝试了以下代码,但它确实有用。

    final ImageView iv = (ImageView) findViewById(R.id.image_view);
    File file = new File("/storage/sdcard0/Download/ic_launcher.png");
    BitmapDrawable bw = new BitmapDrawable(file.getAbsolutePath());
    iv.setImageDrawable(bw);

但是,我认为您需要的是Bitmap,可以使用

创建
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

您可能会发现this toturialthis link有帮助。