Skip to content

Latest commit

 

History

History
355 lines (239 loc) · 11.9 KB

README_zh.md

File metadata and controls

355 lines (239 loc) · 11.9 KB

logo_image Sketch Image Loader

Platform API License version_icon QQ Group

翻译:English

Sketch 是 Android 上的一个强大且全面的图片加载库,除了基础功能外,还支持 Jetpack Compose、GIF、SVG、视频缩略图、手势缩放、超大图采样、ExifInterface 等功能。

特点

  • 支持 http、asset、content、android.resource 等多种 URI
  • 支持播放 gif、webp、heif 等动图
  • 支持手势缩放及超大图采样
  • 支持下载、转换结果、内存三级缓存
  • 支持通过 Exif 纠正图片方向
  • 支持 Base64、视频帧、SVG 图片
  • 支持 Jetpack Compose
  • 支持根据 view 大小自动调整图片尺寸
  • 支持仅加载图片到内存或仅下载图片到磁盘
  • 支持节省蜂窝流量等各种实用功能
  • 支持对 URI、缓存、解码、转换、显示、占位图等各个环节的扩展
  • 基于 Kotlin 及 Kotlin 协程编写

导入

已发布到 mavenCentral

dependencies {
    // 提供了 Sketch 的核心功能以及单例和依赖此单例实现的一些便捷的扩展函数,
    // 如果不需要单例可以使用 sketch-core 模块
    implementation("io.github.panpf.sketch3:sketch:${LAST_VERSION}")
}

${LAST_VERSION}: Download (不包含 'v')

还有一些可选的模块用来扩展 sketch 的功能:

dependencies {
    // 支持 Jetpack Compose
    // 它依赖 sketch 模块提供的单例,如果不需要单例模式可以使用 sketch-compose-core 模块
    implementation("io.github.panpf.sketch3:sketch-compose:${LAST_VERSION}")

    // 为 View 提供下载进度、列表滑动中暂停加载、节省蜂窝流量、图片类型角标、加载 apk 文件和已安装 app 图标等实用功能
    // 它依赖 sketch 模块提供的单例,如果不需要单例模式可以使用 sketch-view-core 模块
    implementation("io.github.panpf.sketch3:sketch-extensions-view:${LAST_VERSION}")

    // 为 Compose 提供下载进度、列表滑动中暂停加载、节省蜂窝流量、图片类型角标、加载 apk 文件和已安装 app 图标等实用功能
    implementation("io.github.panpf.sketch3:sketch-extensions-compose:${LAST_VERSION}")

    // 通过 Android 内置的 ImageDecoder 和 Movie 类实现 gif 播放
    implementation("io.github.panpf.sketch3:sketch-gif:${LAST_VERSION}")

    // 通过 koral 的 android-gif-drawable 库的 GifDrawable 实现 gif 播放
    implementation("io.github.panpf.sketch3:sketch-gif-koral:${LAST_VERSION}")

    // 支持 OkHttp
    implementation("io.github.panpf.sketch3:sketch-okhttp:${LAST_VERSION}")

    // 支持 SVG 图片
    implementation("io.github.panpf.sketch3:sketch-svg:${LAST_VERSION}")

    // 通过 Android 内置的 MediaMetadataRetriever 类实现读取视频帧
    implementation("io.github.panpf.sketch3:sketch-video:${LAST_VERSION}")

    // 通过 wseemann 的 FFmpegMediaMetadataRetriever 库实现读取视频帧
    implementation("io.github.panpf.sketch3:sketch-video-ffmpeg:${LAST_VERSION}")

    // 支持手势缩放以及超大图采样
    implementation("io.github.panpf.sketch3:sketch-zoom:${LAST_VERSION}")
}

R8 / Proguard

Sketch 自己不需要配置任何混淆规则,但你可能需要为间接依赖的 Kotlin Coroutines, OkHttp, Okio 添加混淆配置

快速上手

ImageView

Sketch 为 ImageView 提供了一系列的名为 displayImage 的扩展函数,可以方便的显示图片

// http
imageView.displayImage("https://www.sample.com/image.jpg")

// File
imageView.displayImage("/sdcard/download/image.jpg")

// asset
imageView.displayImage("asset://image.jpg")

// There is a lot more...

还可以通过尾随的 lambda 函数配置参数:

imageView.displayImage("https://www.sample.com/image.jpg") {
    placeholder(R.drawable.placeholder)
    error(R.drawable.error)
    transformations(CircleCropTransformation())
    crossfade()
    // There is a lot more...
}

Jetpack Compose

Important

必须导入 sketch-compose 模块

AsyncImage(
    imageUri = "https://www.sample.com/image.jpg",
    modifier = Modifier.size(300.dp, 200.dp),
    contentScale = ContentScale.Crop,
    contentDescription = ""
)

// config params
AsyncImage(
    rqeuest = DisplayRequest(LocalContext.current, "https://www.sample.com/image.jpg") {
        placeholder(R.drawable.placeholder)
        error(R.drawable.error)
        transformations(BlurTransformation())
        crossfade()
        // There is a lot more...
    },
    modifier = Modifier.size(300.dp, 200.dp),
    contentScale = ContentScale.Crop,
    contentDescription = ""
)

文档

基础功能:

特色功能:

更新日志

请查看 CHANGELOG.md 文件

关于 3.0 版本

  • maven groupId 改为 io.github.panpf.sketch3,因此 2.* 版本不会提示升级
  • 包名改为 com.github.panpf.sketch 因此与 2.* 版本不会冲突
  • 基于 kotlin 协程重写,API、功能实现全部重构,当一个新的库用
  • 不再要求必须使用 SketchImageView,任何 ImageView 及其子类都可以,结合自定义 Target 可以支持任意 View
  • Zoom 功能拆分成独立的可单独依赖的模块并且超大图采样功能重构且支持多线程解码速度更快
  • gif 模块现在直接依赖 android-gif-drawable 库不再二次修改,可自行升级
  • 支持 Jetpack Compose
  • 支持请求和解码拦截器
  • 参考 coil 并结合 sketch 原有功能实现,对比 coil 有以下区别:
    • sketch 最低支持 API 16,而 coil 最低仅支持 API 21
    • sketch 支持 bitmap 复用,而 coil 不支持
    • sketch 支持更加精细化的调整图片大小
    • sketch 明确区分显示、加载、下载请求
    • sketch 提供了图片缩放显示组件并且支持超大图采样

特别感谢

我的项目

以下是我的其它开源项目,感兴趣的可以了解一下:

  • zoomimage:用于缩放图像的库,支持 Android View、Compose 以及 Compose Multiplatform;支持双击缩放、单指或双指手势缩放、单指拖动、惯性滑动、定位、旋转、超大图子采样等功能。
  • assembly-adapter:Android 上的一个为各种 Adapter 提供多类型 Item 实现的库。还顺带为 RecyclerView 提供了最强大的 divider。
  • sticky-item-decoration:RecyclerView 黏性 item 实现

License

Apache 2.0. 有关详细信息,请参阅 LICENSE 文件.