袖珍投射像导航栏背景图片

Pocket casts like navigation bar background image

我想知道 pocket casts 应用程序是如何创建其导航栏背景图像的。据我所知,他们从您订阅的播客中获取图像,并以某种方式创建此图像并将其设置为导航栏背景。很酷的效果!

在重新创建与此类似的内容时有什么技巧吗?

谢谢!

  1. 使用 NavigationView 的 header 的宽度和高度创建一个空的 Bitmap
  2. 收集 Bitmap 个您感兴趣的图像,并在 Canvas 上将它们按比例并排绘制。你总是从0画到scaledBitmap.getWidth(),那么scaledBitmap.getWidth()应该被保存为下一个Bitmap的下一个起点。对高度执行相同的逻辑。出于内存和性能原因,将您要绘制的 Bitmap 数量限制为一定数量。
  3. 将属于 header 视图的 ImageViewMatrix 旋转一定角度
  4. 将所需颜色的 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)。

干杯