1

アップデート:

https://github.com/ulyssesp/SharedElementTransitionsに再現があります。

これは、遷移中の ImageView を保持する DialogFragment がある場合にのみ発生し、たまにしか発生しません。その場合、画像が DialogFragment の下部から外れていてもまだ表示されている場合は、画像の一部が正しくレンダリングされていることがわかります。DialogFragment が ImageView の後 (したがって上) にレンダリングされる競合状態のように感じます。


ピカソとキャッシュを使用して画像をロードするImageViewためScrollViewの共有要素トランジションを使用しようとしています。DialogFragmentScrollViewスクロールすると、トランジションに入るときにちらつきが発生することがあります。

https://drive.google.com/file/d/0B9K_Hjcu9iFOV3lYNVB1UlpsNTQ/view?usp=sharing

上のビデオ ファイルの最後のクリックは、私が話していることを最もよく示しています。ちらつきは毎回発生するとは限らないことに注意してください。ちらつきが発生するには、スクロール ビューをスクロールする必要があります。実際のプロジェクトではもっと多くのことが起こっていますが、これはバグを再現するための最小限のサンプル プロジェクトです。

関連コード:

スタイル.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowSharedElementReenterTransition">@null</item>
    <item name="android:windowSharedElementExitTransition">@null</item>
</style>

ImageFragment::onCreateView:

...

mImageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ActivityOptions activityOptions =
            ActivityOptions.makeSceneTransitionAnimation(getActivity(), v, "image");

        Intent i = new Intent(getActivity(), ImageDisplayActivity.class);
        i.putExtra("url", "http://i.imgur.com/DvpvklR.png");
        getActivity().startActivity(i, activityOptions.toBundle());
    }
});

new Picasso.Builder(getActivity())
    .memoryCache(MainActivity.sCache)
    .build()
    .load("http://i.imgur.com/DvpvklR.png")
    .into(mImageView);

...

ImageDisplayActivity:

...

mImageView.setImageBitmap(MainActivity.sCache.get(getIntent().getStringExtra("url") + "\n"));

洞察がある場合、またはさらに情報が必要な場合は、お知らせください。

4

1 に答える 1

2

これは、Activity Transitions のバグのようです。共有要素の exit トランジションも exit トランジションもありませんが、共有要素を Window のルート オーバーレイに移動します。通常、これは問題ではありませんが、DialogFragment が新しいウィンドウを作成するダイアログを作成するため、共有要素はダイアログのウィンドウからアクティビティのウィンドウに移動します! 共有要素がダイアログの下に一時的に表示され、開始されたアクティビティがそれを受け取ると上に表示されます。

アクティビティ ウィンドウのオーバーレイだけでなく、共有要素を正しいオーバーレイに移動することで、これを修正できることが理想的です。そうすれば、ダイアログとアクティビティのウィンドウの要素を共有すると、それらはすべて適切な場所に表示されます。

ただし、今のところ、これは機能しません。ごめん。

于 2015-10-15T18:13:44.783 に答える