2

I have an activity with a com.facebook.samples.zoomable.ZoomableDraweeView. When the phone's overview button is pressed, the onSaveInstanceState() method is called, and I am storing DefaultZoomableController.transform value in case the view needs to be re-created. However, if I immediately return to my app, onCreate(Bundle savedInstanceState) is not called and I do not have a transform value to restore, but the ZoomableDraweeView is already reset to its initial state. Apparently onCreate() is not called if the view does not need to be re-created.

Then, ZoomableDraweeView should not be going back to its initial state. I see the transform value is reset at:

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)

How can I suppress calls to ZoomableDraweeView.onRelease() and/or DefaultZoomableController.reset()?

Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
kiewic
  • 15,852
  • 13
  • 78
  • 101

1 Answers1

0

Although most of the state is saved and restored automatically by fresco, it seems the ZoomableController.transform: Matrix is not managed automatically. I resolved this issue by making a copy of the Matrix during Activity.onPause() and restoring it during Activity.onResume().

For example:

class MainActivity {
    private var transform: Matrix = Matrix()

    override fun onResume() {
        super.onResume()
        defaultZoomableController.transform = transform
    }

    override fun onPause() {
        transform = Matrix(defaultZoomableController.transform)
        super.onPause()
    }
}
kiewic
  • 15,852
  • 13
  • 78
  • 101