<p>システムUIの表示が変更されると、PhotoViewズームがリセットされます</p>

作成日 2016年08月24日  ·  9コメント  ·  ソース: Baseflow/PhotoView

これは、システムUIの表示が変更されたときにsetFrame()が呼び出され、フレームが実際に変更されたかどうかに関係なくupdate()が呼び出されるためと思われます。 (私の場合、システムUIは安定しているため、安定していません。)

考えられる修正:

  • 境界が変更されない場合は、setFrame()がupdate()を呼び出さないようにします。 これは、システムUIが安定している場合にのみ機能します。 または:
  • 可能な場合は、update()が同じ相対スケールを保持するようにします。

必要に応じて、最初のオプションを実装するためのプルリクエストを送信できますが、2番目のオプションを実装するための内部については十分に理解していません。

ありがとう。

最も参考になるコメント

変更された変数がtrueの場合にのみ、setFrameがupdateを呼び出すようにすることで、ローカルで修正済みです。 公式の実装で修正できることを望んでいるので、ソースにPhotoViewのコピーを保持する必要はありません。

全てのコメント9件

PhotoView.javaでsetFrameをオーバーライドしないようにします。動作します。

 //  <strong i="6">@Override</strong>
//    protected boolean setFrame(int l, int t, int r, int b) {
//        boolean changed = super.setFrame(l, t, r, b);
//        if (null != mAttacher) {
//            mAttacher.update();
//        }
//        return changed;
//    }

また

   <strong i="10">@Override</strong>
     protected boolean setFrame(int l, int t, int r, int b) {
         boolean changed = super.setFrame(l, t, r, b);
         if (changed && null != mAttacher) {
            mAttacher.update();
         }
        return changed;
     }

変更された変数がtrueの場合にのみ、setFrameがupdateを呼び出すようにすることで、ローカルで修正済みです。 公式の実装で修正できることを望んでいるので、ソースにPhotoViewのコピーを保持する必要はありません。

これは修正されたことがありますか?

if(changed && null!= mAttacher){
mAttacher.update();
}

このコードは、sharedElementを使用するときに問題があります

sharedElementを使用するときに良い解決策を見つけます

@オーバーライド
public Matrix getImageMatrix(){

    mAttacher.update();

    return mAttacher.getImageMatrix();
}

あなたが同じ問題を抱えているなら、あなたはそれを試すことができます

このバグも発生しました。 Androidデータバインディングライブラリを使用していますが、データバインディングを介してTextViewのテキストを更新すると、PhotoViewも「リセット」されるようです。 FloatingActionButtonの可視性を(データバインディングを介して)GONEとの間で更新しようとしたときも同じ動作ですが、INVISIBLEとの間でsetFrame()がトリガーされないようです。 @FaultExceptionをフォローすると、しぶしぶPhotoViewのローカルコピーがあります。 公式リポジトリで修正できることを願っています!

@ hyne-shan共有要素でどのような問題が発生しますか?

@FaultExceptionアニメーションが揺れます

これは現在修正されています

このページは役に立ちましたか?
0 / 5 - 0 評価