Android 按下概览按钮时,ZoomableDraweeView被释放并重置
我在一个Android 按下概览按钮时,ZoomableDraweeView被释放并重置,android,fresco,Android,Fresco,我在一个com.facebook.samples.zoomable.ZoomableDraweeView上有一个活动。按下手机时,会调用onSaveInstanceState()方法,我正在存储DefaultZoomableController.transform值,以防需要重新创建视图。但是,如果我立即返回我的应用程序,onCreate(Bundle savedInstanceState)不会被调用,并且我没有要还原的转换值,但是ZoomableDraweeView已经重置为其初始状态。显然,
com.facebook.samples.zoomable.ZoomableDraweeView
上有一个活动。按下手机时,会调用onSaveInstanceState()
方法,我正在存储DefaultZoomableController.transform
值,以防需要重新创建视图。但是,如果我立即返回我的应用程序,onCreate(Bundle savedInstanceState)
不会被调用,并且我没有要还原的转换值,但是ZoomableDraweeView
已经重置为其初始状态。显然,如果不需要重新创建视图,则不会调用onCreate()
然后,ZoomableDraweeView
不应返回其初始状态。我看到转换
值在以下位置重置:
at com.facebook.samples.zoomable.DefaultZoomableController.reset(DefaultZoomableController.java:93)
at com.facebook.samples.zoomable.AbstractAnimatedZoomableController.reset(AbstractAnimatedZoomableController.java:44)
at com.facebook.samples.zoomable.DefaultZoomableController.setEnabled(DefaultZoomableController.java:108)
at com.facebook.samples.zoomable.ZoomableDraweeView.onRelease(ZoomableDraweeView.java:368)
at com.facebook.samples.zoomable.ZoomableDraweeView.access$100(ZoomableDraweeView.java:43)
at com.facebook.samples.zoomable.ZoomableDraweeView$1.onRelease(ZoomableDraweeView.java:69)
at com.facebook.drawee.controller.AbstractDraweeController.releaseFetch(AbstractDraweeController.java:193)
at com.facebook.drawee.controller.AbstractDraweeController.release(AbstractDraweeController.java:169)
at com.facebook.drawee.components.DeferredReleaser$1.run(DeferredReleaser.java:65)
at android.os.Handler.handleCallback(Handler.java:761)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Method.java:-1)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:942)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
如何抑制对
ZoomableDraweeView.onRelease()
和/或DefaultZoomableController.reset()
的调用?尽管大部分状态是由fresco自动保存和恢复的,但似乎ZoomableController.transform:Matrix
不是自动管理的。我通过在Activity.onPause()
期间复制矩阵并在Activity.onResume()期间还原矩阵,解决了此问题
用于:
class MainActivity {
private var transform: Matrix = Matrix()
override fun onResume() {
super.onResume()
defaultZoomableController.transform = transform
}
override fun onPause() {
transform = Matrix(defaultZoomableController.transform)
super.onPause()
}
}