袖珍投射像导航栏背景图片
Pocket casts like navigation bar background image
我想知道 pocket casts 应用程序是如何创建其导航栏背景图像的。据我所知,他们从您订阅的播客中获取图像,并以某种方式创建此图像并将其设置为导航栏背景。很酷的效果!
在重新创建与此类似的内容时有什么技巧吗?
谢谢!
- 使用
NavigationView
的 header 的宽度和高度创建一个空的 Bitmap
。
- 收集
Bitmap
个您感兴趣的图像,并在 Canvas
上将它们按比例并排绘制。你总是从0
画到scaledBitmap.getWidth()
,那么scaledBitmap.getWidth()
应该被保存为下一个Bitmap
的下一个起点。对高度执行相同的逻辑。出于内存和性能原因,将您要绘制的 Bitmap
数量限制为一定数量。
- 将属于 header 视图的
ImageView
的 Matrix
旋转一定角度
- 将所需颜色的
ColorFilter
应用于整个 header 视图。
这也可以通过旋转可绘制对象来完成。
按照@Nikola 回答的步骤进行操作:
public static Bitmap createBitmap(int width, int height, List<Bitmap> bitmaps) {
final Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(newBitmap);
final Paint paint = new Paint();
paint.setAlpha(50);
int currentWidth = 0;
int currentHeight = 0;
for (Bitmap scaledBitmap : bitmaps) {
//draw the bitmap
canvas.drawBitmap(scaledBitmap, currentWidth, currentHeight, paint);
//update width
currentWidth += scaledBitmap.getWidth();
//update height
if (currentWidth > width) {
currentWidth = 0;
currentHeight += scaledBitmap.getHeight();
}
}
return newBitmap;
}
主要区别在于我最终设置了透明度(使用 setAlpha)而不是 ColorFilter。
如果最后您仍想旋转,只需在将保存位图的图像视图中调用 imageView.setRotation(degree)。
干杯
我想知道 pocket casts 应用程序是如何创建其导航栏背景图像的。据我所知,他们从您订阅的播客中获取图像,并以某种方式创建此图像并将其设置为导航栏背景。很酷的效果!
在重新创建与此类似的内容时有什么技巧吗?
谢谢!
- 使用
NavigationView
的 header 的宽度和高度创建一个空的Bitmap
。 - 收集
Bitmap
个您感兴趣的图像,并在Canvas
上将它们按比例并排绘制。你总是从0
画到scaledBitmap.getWidth()
,那么scaledBitmap.getWidth()
应该被保存为下一个Bitmap
的下一个起点。对高度执行相同的逻辑。出于内存和性能原因,将您要绘制的Bitmap
数量限制为一定数量。 - 将属于 header 视图的
ImageView
的Matrix
旋转一定角度 - 将所需颜色的
ColorFilter
应用于整个 header 视图。
这也可以通过旋转可绘制对象来完成。
按照@Nikola 回答的步骤进行操作:
public static Bitmap createBitmap(int width, int height, List<Bitmap> bitmaps) {
final Bitmap newBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(newBitmap);
final Paint paint = new Paint();
paint.setAlpha(50);
int currentWidth = 0;
int currentHeight = 0;
for (Bitmap scaledBitmap : bitmaps) {
//draw the bitmap
canvas.drawBitmap(scaledBitmap, currentWidth, currentHeight, paint);
//update width
currentWidth += scaledBitmap.getWidth();
//update height
if (currentWidth > width) {
currentWidth = 0;
currentHeight += scaledBitmap.getHeight();
}
}
return newBitmap;
}
主要区别在于我最终设置了透明度(使用 setAlpha)而不是 ColorFilter。
如果最后您仍想旋转,只需在将保存位图的图像视图中调用 imageView.setRotation(degree)。
干杯