Android 使用Glide使用生成器生成位图

Android 使用Glide使用生成器生成位图,android,android-glide,Android,Android Glide,我有一个Glide(Android的图像缓存库)的用例不是典型的-对于列表视图中的每个项目,如果缓存了,我需要显示一个缩略图-如果没有,我需要使用自定义位图渲染器生成一个(而不是下载一个) 查看文档,我看到了很多关于解码和转码的讨论,但我的用例实际上并不属于这两种情况。我需要Glide将标识符传递给渲染器-渲染器将检查数据存储并根据需要生成位图。没有溪流可言 我正在寻找一个如何实现这一点的例子。您想要做的是可能的,尽管Glide 3.0(将是4.0)的一个巨大目标不是支持自定义解码器,所以这个过

我有一个Glide(Android的图像缓存库)的用例不是典型的-对于
列表视图中的每个项目,如果缓存了,我需要显示一个缩略图-如果没有,我需要使用自定义
位图
渲染器生成一个(而不是下载一个)

查看文档,我看到了很多关于解码和转码的讨论,但我的用例实际上并不属于这两种情况。我需要Glide将标识符传递给渲染器-渲染器将检查数据存储并根据需要生成
位图。没有溪流可言


我正在寻找一个如何实现这一点的例子。

您想要做的是可能的,尽管Glide 3.0(将是4.0)的一个巨大目标不是支持自定义解码器,所以这个过程有点笨拙

Glide的代码和示例提供了两个如何工作的示例。对于自定义资源类型,请查看。对于自定义模型类型和自定义解码器,请查看用于解码的代码。根据您的描述,听起来Gif帧示例可能更相关

假设我了解您想要做什么,您需要定义并提供两个接口

  • 首先,您需要定义一个。传统上,ModelLoader用于检索数据。如果没有必要(即,您可以单独从标识符解码位图),您可以按照上面的Gif帧示例简单地传递标识符

  • 其次,您需要定义一个。您的ResourceDecoder将获取标识符,检查数据存储,生成位图,然后返回新的

  • 由于您正在解码Glide知道的资源类型,因此可以传入Glide,如果您希望支持磁盘缓存,则传入Glide的任何一个,如果您希望应用转换,最后可以使用Glide指定如何将位图加载到视图中

    整个加载调用将如下所示:

    Glide.with(fragment)
        .using(new YourModelLoader(), YourIdentifier.class)
        .load(yourIdentifier)
        .as(Bitmap.class)
        .decoder(new YourBitmapDecoder())
        .cacheDecoder(new FileToStreamDecoder(new StreamBitmapDecoder())
        .encoder(new BitmapEncoder())
        .transform(new CenterCrop())
        .into(new BitmapImageViewTarget(yourView);
    
    由于需要指定的内容很多,因此您还可以定义一次构建器并将其重新用于加载多个标识符:

    builder = Glide.with(fragment)
        .using(new YourModelLoader(), YourIdentifier.class)
        .as(Bitmap.class)
        .decoder(new YourBitmapDecoder())
        .cacheDecoder(new FileToStreamDecoder(new StreamBitmapDecoder())
        .encoder(new BitmapEncoder())
        .transform(new CenterCrop());
    
    // At some point later:
    builder
        .load(firstIdentifier)
        .into(new BitmapImageViewTarget(firstView));
    builder
        .load(secondIdentifier)
        .into(new BitmapImageViewTarget(secondView));
    
    Glide 4.0允许您注册新组件并使用现有构建器,而不是强制您单独提供每个部分并仅使用GenericRequestBuilder,从而有助于减轻一些样板文件的负担