Skip to content

Commit

Permalink
🔖 Release 2.6.0-p1
Browse files Browse the repository at this point in the history
  • Loading branch information
Flyge committed Nov 2, 2017
1 parent 06a18ae commit e55e7c1
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 43 deletions.
57 changes: 32 additions & 25 deletions docs/logs/log_2.6.0_p1.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,41 @@
这是一个重大重构版本,重点重构了 ImageZoomer、HugeImageViewer 以及将包名改为 me.panpf.sketch
这是一个重大重构版本,重点重构了 [ImageZoomer]、HugeImageViewer 以及将包名改为 me.panpf.sketch

:bug: 不能无痛升级 :bug:
:bug: 不能无痛升级 :bug:,请参考页尾的升级指南

### Sketch

修复bug
修复 bug
* :bug: 修复开启解码 gif 后内存缓存失效的 bug
* :bug: 修复在生成 WrappedImageProcessor 的 key 时崩溃的错误
* :bug: 修复在生成 [WrappedImageProcessor] 的 key 时崩溃的错误

包名重构:
* :hammer: sketch library 的包名改为 me.panpf.sketch
* :hammer: sketch-gif library 的包名改为 me.panpf.sketch
* :hammer: sketch-gif library 的包名改为 me.panpf.sketch.gif

ImageZoomer 重构:
* :hammer: 重构 ImageZoomer 的代码结构,现在逻辑更清晰易懂
* :hammer: SketchImageView.getImageZoomer() 重命名为 getZoomer()
* :hammer: ImageZoomer 从 me.xiaopan.sketch.viewfun.zoom 移动到 me.xiaopan.sketch.zoom
* :hammer: 重构 [ImageZoomer] 的代码结构,现在逻辑更清晰易懂
* :hammer: [SketchImageView].getImageZoomer() 重命名为 getZoomer()
* :hammer: [ImageZoomer] 从 me.xiaopan.sketch.viewfun.zoom 移动到 me.xiaopan.sketch.zoom

HugeImageViewer 重构:
* :hammer: hugeImageEnabled 合并到 zoomEnabled,现在只有 zoomEnabled 一个开关
* :hammer: HugeImageViewer 从 me.xiaopan.sketch.viewfun.huge 移动到 me.xiaopan.sketch.zoom
* :hammer: HugeImageViewer 重命名为 BlockDisplayer
* :hammer: SketchImageView.getHugeImageViewer() 移除,请用 getZoomer().getBlockDisplayer() 代替
* :hammer: Tile 重命名为 Block
* :hammer: 所有 tile 相关的名字 全部改成了 block
* :hammer: ErrorTracker.onTileSortError() 重命名为 onBlockSortError
* :hammer: HugeImageViewer 重命名为 [BlockDisplayer]
* :hammer: 移除 [SketchImageView].getHugeImageViewer() 方法,请用 [SketchImageView].getZoomer().getBlockDisplayer() 代替
* :hammer: Tile 重命名为 [Block],并且所有 tile 相关的名字 全部改成了 block
* :hammer: [ErrorTracker].onTileSortError() 重命名为 onBlockSortError()

其它重构:
* :hammer: UriModelRegistry 重命名为 UriModelManager
* :hammer: OptionsFilterRegistry 重命名为 OptionsFilterManager
* :hammer: HttpStack.ImageHttpResponse 重命名为 HttpStack.Response
* :hammer: HttpStack.getHttpResponse(String). 重命名为 HttpStack.getResponse(String)
* :hammer: HttpStack.ImageHttpResponse.getResponseCode() 重命名为 HttpStack.Response.getCode()
* :hammer: HttpStack.ImageHttpResponse.getResponseMessage() 重命名为 HttpStack.Response.getMessage()
* :hammer: HttpStack.ImageHttpResponse.getResponseHeadersString() 重命名为 HttpStack.Response.getHeadersString()
* :hammer: HttpStack.ImageHttpResponse.getResponseHeader() 重命名为 HttpStack.Response.getHeader()
* :hammer: ImageAttrs 从 drawable 中移动到 decode 包中
* :hammer: 重构 WrappedImageProcessor 的 getKey() 和 toString() 方法,所有子类都需要重新适配
* :hammer: UriModelRegistry 重命名为 [UriModelManager]
* :hammer: OptionsFilterRegistry 重命名为 [OptionsFilterManager]
* :hammer: [HttpStack].ImageHttpResponse 重命名为 [HttpStack].Response
* :hammer: [HttpStack].getHttpResponse(String). 重命名为 [HttpStack].getResponse(String)
* :hammer: [HttpStack].ImageHttpResponse.getResponseCode() 重命名为 [HttpStack].Response.getCode()
* :hammer: [HttpStack].ImageHttpResponse.getResponseMessage() 重命名为 [HttpStack].Response.getMessage()
* :hammer: [HttpStack].ImageHttpResponse.getResponseHeadersString() 重命名为 [HttpStack].Response.getHeadersString()
* :hammer: [HttpStack].ImageHttpResponse.getResponseHeader() 重命名为 [HttpStack].Response.getHeader()
* :hammer: [ImageAttrs] 从 drawable 中移动到 decode 包中
* :hammer: 重构 [WrappedImageProcessor] 的 getKey() 和 toString() 方法,所有子类都需要重新适配

改进:
* :art: 优化 key 的格式,现在 key 的格式更加短小,并且在控制台点击跳转到浏览器后不用对 uri 做任何修改即可显示图片,但旧的已处理缓存 key 和其他的需要根据 key 缓存的磁盘缓存将全部失效
Expand All @@ -57,5 +56,13 @@ HugeImageViewer 重构:
* 全局搜索 `me.xiaopan.sketch.viewfun.zoom.ImageZoomer` 并替换为 `me.xiaopan.sketch.zoom.ImageZoomer`
* 全局搜索 `me.xiaopan.sketch` 替换为 `me.panpf.sketch`

### 待办
* 重写 block_display.md ,然后在 zoom.md 中引用
[ImageZoomer]: ../../sketch/src/main/java/me/panpf/sketch/zoom/ImageZoomer.java
[BlockDisplayer]: ../../sketch/src/main/java/me/panpf/sketch/zoom/BlockDisplayer.java
[Block]: ../../sketch/src/main/java/me/panpf/sketch/zoom/block/Block.java
[SketchImageView]: ../../sketch/src/main/java/me/panpf/sketch/SketchImageView.java
[WrappedImageProcessor]: ../../sketch/sketch/src/main/java/me/panpf/sketch/process/WrappedImageProcessor.java
[ErrorTracker]: ../../sketch/sketch/src/main/java/me/panpf/sketch/ErrorTracker.java
[UriModelManager]: ../../sketch/src/main/java/me/panpf/sketch/uri/UriModelManager.java
[OptionsFilterManager]: ../../sketch/src/main/java/me/panpf/sketch/optionsfilter/OptionsFilterManager.java
[HttpStack]: ../../sketch/src/main/java/me/panpf/sketch/http/HttpStack.java
[ImageAttrs]: ../../sketch/src/main/java/me/panpf/sketch/decode/ImageAttrs.java
Binary file modified docs/sketch-sample.apk
Binary file not shown.
24 changes: 8 additions & 16 deletions docs/wiki/block_display.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,21 @@

然后 Android 官方并没有提供现成可用的控件来解决这个问题,仅在 API 10 之后提供了 [BitmapRegionDecoder] 可以让我们读取完整图片的部分区域

纵观其它几款流行的图片加载器 [Fresco][Glide][Picasso] 都没有提供超大图片支持,而单独支持超大图片的 View 倒是有几款,例如 [Subsampling Scale Image View][WorldMap][LargeImage] , 但都做的不够好或者没法跟现有的图片加载框架集成,做的不好还好说,不能跟现有图片加载框架集成用起来就很恶心了
纵观其它几款流行的图片加载器 [Fresco][Glide][Picasso] 都没有提供分块显示支持,而单独支持分块显示的 View 倒是有几款,例如 [Subsampling Scale Image View][WorldMap][LargeImage] , 但都做的不够好或者没法跟现有的图片加载框架集成,做的不好还好说,不能跟现有图片加载框架集成用起来就很恶心了

下面用 [Glide] 代指现有的图片框架,用 [Subsampling Scale Image View] 代指单独的分块显示超大图控件来举例说明两者不能集成时的不便之处
下面用 [Glide] 代指现有的图片框架,用 [Subsampling Scale Image View] 代指单独的分块显示控件来举例说明两者不能集成时的不便之处

1. 图片详情页必须准备两个 ImageView,一个 [Glide] 是用的,一个是 [Subsampling Scale Image View]。先用 [Glide] 加载完图片,然后根据结果(如果返回了原始图片尺寸的话,没有的话你还要自己去解析并判断)判断这张图片需不需要用 [Subsampling Scale Image View],如果需要的话再将 [Subsampling Scale Image View] 显示出来遮盖住 [Glide] 用的 ImageView,并初始化 [Subsampling Scale Image View]
2. [Subsampling Scale Image View] 要继续优化的话,还会涉及到内存缓存和 bitmap 复用池,如果 [Subsampling Scale Image View][Glide] 分别单独维护一套的话,APP 的可用内存就剩不了多少了,因此这两者必须能共用一套内存缓存和 bitmap 复用池
3. [Glide] 支持的 uri,[Subsampling Scale Image View] 未必支持

### 使用

Sketch 是目前唯一提供了超大图片支持的图片加载器,核心类是 [BlockDisplayer]依赖于[手势缩放][zoom]功能,[手势缩放][zoom]能的一部分
Sketch 是目前唯一提供了分块显示支持的图片加载器,核心类是 [BlockDisplayer],是[手势缩放][zoom]功能的一部分

#### 支持的图片类型和系统版本
* jpeg、png:API 10(2.3.3)及其以上
* webp:API 14(4.0)及其以上

#### 使用条件

只要满足上述对图片类型和系统版本的要求并且读到内存的图片比原始图片小就可以使用超大图功能

#### 开启

只要开启[手势缩放][zoom]就自动开启了分块显示功能
只要开启[手势缩放][zoom]就自动开启了分块显示功能,但开启后不一定所有图片都会启用分块显示功能,必须同时满足以下两个条件
* 图片是 jpeg 或 png 类型且 API 10(2.3.3)及其以上或者图片是 webp 类型且 API 14(4.0)及其以上
* 读到内存的图片尺寸比原始图片小

#### 旋转

Expand All @@ -48,7 +40,7 @@ public class MyFragment extends Fragment {
sketchImageView = ...;

sketchImageView.setZoomEnabled(true);
// 初始化超大图查看器的暂停状态,这一步很重要
// 初始化分块显示器的暂停状态,这一步很重要
sketchImageView.getZoomer().getBlockDisplayer().setPause(!isVisibleToUser());

return view;
Expand Down Expand Up @@ -83,7 +75,7 @@ public class MyFragment extends Fragment {
}

protected void onUserVisibleChanged(boolean isVisibleToUser) {
// 不可见的时候暂停超大图查看器,节省内存,可见的时候恢复
// 不可见的时候暂停分块显示器,节省内存,可见的时候恢复
if (sketchImageView != null && sketchImageView.isZoomEnabled()) {
sketchImageView.getZoomer().getBlockDisplayer().setPause(!isVisibleToUser);
}
Expand Down
5 changes: 5 additions & 0 deletions docs/wiki/zoom.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,10 @@ imageZoomer.location(100f, 200f, true);

通过 location 方法设置的位置只是临时性的并不会一直保持,其它任何位移行为和更新行为都会覆盖此位置

### 分块显示超大图

[ImageZoomer] 支持分块显示超大图,详情请参考 [分块显示超大图片][block_display.md]

### 阅读模式

对于宽高相差特别大的图片(比如长微博),如果上来就显示全貌,那么肯定是什么也看不清除,用户必须双击一下放大才能看清楚,那么针对这样的图片 [ImageZoomer] 特别支持了阅读模式来提高用户体验
Expand Down Expand Up @@ -219,3 +223,4 @@ public boolean dispatchTouchEvent(MotionEvent ev) {
[PhotoView]: https://github.com/chrisbanes/PhotoView
[ImageZoomer]: ../../sketch/src/main/java/me/panpf/sketch/viewfun/zoom/ImageZoomer.java
[ImageSizeCalculator]: ../../sketch/src/main/java/me/panpf/sketch/decode/ImageSizeCalculator.java
[block_display.md]: block_display.md
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ MIN_SDK_VERSION=10
TARGET_SDK_VERSION=22
TARGET_SDK_VERSION_LIBRARY=22

VERSION_CODE=2500
VERSION_NAME=2.5.0
VERSION_CODE=2501
VERSION_NAME=2.6.0-p1

ANDROID_SUPPORT_LIBRARY_VERSION=25.3.0
CONSTRAINT_LAYOUT_VERSION=1.0.2
Expand Down

0 comments on commit e55e7c1

Please sign in to comment.