これは、システムUIの表示が変更されたときにsetFrame()が呼び出され、フレームが実際に変更されたかどうかに関係なくupdate()が呼び出されるためと思われます。 (私の場合、システムUIは安定しているため、安定していません。)
考えられる修正:
必要に応じて、最初のオプションを実装するためのプルリクエストを送信できますが、2番目のオプションを実装するための内部については十分に理解していません。
ありがとう。
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アニメーションが揺れます
これは現在修正されています
最も参考になるコメント
変更された変数がtrueの場合にのみ、setFrameがupdateを呼び出すようにすることで、ローカルで修正済みです。 公式の実装で修正できることを望んでいるので、ソースにPhotoViewのコピーを保持する必要はありません。