我想将图片res/drawable-hdpi/nasa_image.jpg
设置为壁纸。
我编写了以下代码,但它引发了FileNotFoundException
。
Uri u1 = Uri.fromFile(new File("res/drawable-hdpi/nasa_image.jpg"));
Uri u2 = Uri.parse("android.resource://com.my.package/drawable/nasa_image.jpg");
Uri u3 = Uri.parse("android.resource://com.my.package/" + R.drawable.nasa_image);
WallpaperManager w = WallpaperManager.getInstance(this);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(u));
w.setBitmap(bitmap);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
首先我尝试了u1
。它没用。然后我搜索并找到了this。然后我尝试了u2
和u3
。
我查了一下日志。每次它给出相同的FileNotFoundException
。
如何参考?我哪里错了?我是否选错了根目录?
答案 0 :(得分:0)
我认为这是在android中执行此操作的错误方法。为什么不使用资源标识符?
ImageView imgView=(ImageView)findViewById(R.id.imageView1);
int id = getResources().getIdentifier(nasa_image, "drawable", getPackageName());
Drawable drawable=res.getDrawable(id);
imgView.setImageDrawable(drawable);
或
ImageView imgView=(ImageView)findViewById(R.id.imageView1);
Drawable drawable= getResources().getDrawable(R.drawable.nasa_image);
imgView.setImageDrawable(drawable);
imgView.setImageDrawable();
更新以从drawable转换为位图只需使用此(假设您的drawable是instanceof Bitmapdrawable
)
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
如果您不确定可绘制实例
,请使用此方法public static Bitmap drawableToBitmap (Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable)drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
如果您确定自己是正确的文件路径
,请使用此方法 private Drawable getDrawable(String path) {
File imgFile = new File(path);
if (imgFile.exists()) {
Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
return new BitmapDrawable(resources, bitmap);
}
return null;
}
您可以根据自己的问题调整它以返回位图或绘图
答案 1 :(得分:0)
你不应该包括扩展名(.jpg) 使用:
Uri.parse("android.resource://" + BuildConfig.APPLICATION_ID + "/drawable/nasa_image");
答案 2 :(得分:-1)
尝试
Uri u1 = Uri.parse("R.drawable.nasa_image");