来自Bitmap API 22+的setBackground

时间:2017-03-22 05:08:13

标签: android bitmap setbackground bitmapdrawable

我有一个应用程序可以从用户库中获取所选图像,并将其显示为应用程序中的背景。我已成功使用下面的代码。

Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
BitmapDrawable drawable = new BitmapDrawable(getResources(), BitmapFactory.decodeFile(picturePath));
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    llmain.setBackgroundDrawable(drawable);
} else if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
    llmain.setBackground(drawable);
}

虽然,因为我已将我的应用更新为API 22,所以它已停止工作。我找到了如何用

设置背景
if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
    llmain.setBackgroundDrawable(drawable);
} else if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
    llmain.setBackground(drawable);
} else {
    llmain.setBackground(ContextCompat.getDrawable(this, drawable));
}

但它不起作用,因为ContextCompat.getDrawable()调用是用于上下文和int而不是上下文和BitmapDrawable。

2 个答案:

答案 0 :(得分:0)

很少改变你的代码我希望它对你有所帮助

更新:

Uri selectedImage = data.getData();
    String[] filePathColumn = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
    cursor.moveToFirst();
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
    String picturePath = cursor.getString(columnIndex);
    cursor.close();
    Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
    BitmapDrawable background = new BitmapDrawable(getApplicationContext().getResources(),bitmap);
    llmain.setBackground(background);

答案 1 :(得分:0)

将位图设置为线性布局的背景。

直接你不能将位图设置为布局,所以你应该使用BitmapDrawable将位图转换为drawable。

BitmapDrawable background = new BitmapDrawable(bmImg);
linearLayout.setBackgroundDrawable(background);