Skip to content

Latest commit

 

History

History
96 lines (66 loc) · 3.27 KB

fetcher.md

File metadata and controls

96 lines (66 loc) · 3.27 KB

Fetcher

Fetcher 用于从 uri 获取数据,返回 FetchResult,交由 BitmapDecoderDrawableDecoder 使用。

Sketch 对支持的每一种 uri 都有对应的 Fetcher 实现,共有如下几种:

扩展新的 Fetcher

1. 定义

首先需要实现 Fetcher 接口定义你的 Fetcher 和它的 Factory,如下:

class MyFetcher : Fetcher {

    override suspend fun fetch(): Result<FetchResult> {
        // 在这里解析你的 uri,获取数据
    }

    companion object {
        const val MY_SCHEME = "myUri"
    }

    class Factory : Fetcher.Factory {

        override fun create(sketch: Sketch, request: ImageRequest): MyFetcher? {
            return if (request.uriString.startWith(MY_SCHEME)) {
                MyFetcher()
            } else {
                null
            }
        }
    }
}

2.使用

如果要让所有的 ImageRequest 都使用就在配置 Sketch 时通过 components 方法注册,这样所有的 ImageRequest 都可以使用,如下:

class MyApplication : Application(), SketchFactory {

    override fun createSketch(): Sketch {
        return Sketch.Builder(this).apply {
            components {
                addFetcher(MyFetcher.Factory())
            }
        }.build()
    }
}

或者在显示图片时只给当前 ImageRequest 注册,这样就只有当前 ImageRequest 可以使用,如下:

imageView.displayImage(context, "http://sample.com/sample.jpeg") {
    components {
        addFetcher(MyFetcher.Factory())
    }
}