我在我的 Android 项目中使用PhotoView库。该项目包含SaveStatePhotoView,用于在配置更改(旋转,...)时保持图像视图的状态(缩放级别,位置)。
// SaveStatePhotoView.java
@Override
protected void onRestoreInstanceState(Parcelable state) {
if (!(state instanceof SavedState)) {
super.onRestoreInstanceState(state);
return;
}
final SavedState ss = (SavedState) state;
super.onRestoreInstanceState(ss.getSuperState());
getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
restoreSavedState(ss);
getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
}
该视图在 Android 7.1.1 和 Android 9 上按需要工作。
在Android 6.0.1上,状态丢失:当设备旋转时,图像视图重置为其初始状态。
我准备了一个简单的项目来演示这个问题。请注意,我故意使用PhotoView 1.3.1,因为我目前无法包含传递androidx
依赖项。