我刚刚在 CreateScaledBitmap 线上遇到了这个问题,我试图将此图像设置为设备的墙纸,我需要将此图像缩放到设备,这就是我使用此方法的原因,但不幸的是我无法修复此位图宽度() 错误
setWall.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onClick(View view) {
Picasso.with(getApplicationContext()).load(imageBrought).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
WallpaperManager wallpaperManager = WallpaperManager.getInstance(AppMomentSelected.this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
try {
wallpaperManager.setBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
最佳答案
您有来自 Firebase
的图像的 Url
但是您用来从 Url
获取 Bitmap
的方法是效率不高,可能不可能。您需要做的简单事情是使用一些自定义的 library
下载图像,例如 Picasso
http://square.github.io/picasso/
添加到您的 app gradle
:compile 'com.squareup.picasso:picasso:2.5.2'
现在您可以使用 Picasso
从 Url
下载图像并转换为 Bitmap
:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int width = metrics.widthPixels;
WallpaperManager wallpaperManager = WallpaperManager.getInstance(AppMomentSelected.this);
wallpaperManager.setWallpaperOffsetSteps(1, 1);
wallpaperManager.suggestDesiredDimensions(width, height);
Picasso.with(this)
.load(imageBrought)
.resize(width, height)
.into(new Target() {
@Override
public void onBitmapLoaded (final Bitmap bitmap, Picasso.LoadedFrom from) {
/* Save the bitmap or do something with it here */
wallpaperManager.setBitmap(bitmap);
}
});
关于android - 空对象引用上的 Bitmap.getWidth()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48551226/