Android Shared Element Transition замедляется только с первой попытки - PullRequest
0 голосов
/ 06 августа 2020

Как я уже говорил в заголовке, переход разделяемых элементов между фрагментом и действием происходит медленно, только с первой попытки. Между переходом есть задержка в одну секунду, но когда я делаю это снова, он работает без каких-либо задержек.

Я использую Glide v4 для загрузки изображения, используя только кеш.

apply(RequestOptions().onlyRetrieveFromCache(true))

Изображение все равно загружается, поэтому я не думаю, что здесь есть загрузчик изображений.

Что мне не хватает? Как мне это ускорить?

Я добавляю свой код, который вызывает проблему.

стилей. xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowDisablePreview">true</item>
    <item name="android:windowActivityTransitions">true</item>
    <item name="android:windowSharedElementsUseOverlay">true</item>
    <item name="android:windowBackground">@color/colorTransparent</item>
    <item name="android:colorBackground">@color/colorTransparent</item>
    <item name="android:navigationBarColor">@color/background_material_dark</item>
    <item name="android:ambientShadowAlpha">0.1</item>
    <item name="android:spotShadowAlpha">0.1</item>
</style>

Я вызываю его из Activity (ViewPager) / Fragment (LIST) -> Действие (подробное действие)

на моем фрагменте (который находится внутри окна просмотра),

        val options =
                ActivityOptionsCompat.makeSceneTransitionAnimation(
                    context,
                    holder.itemView.imageViewBg,
                    holder.itemView.imageViewBg.transitionName
                )
        val intent = ...
        ActivityCompat.startActivity(activity, intent, options.toBundle())

на моем подробном действии,

override fun onCreate(savedInstanceState: Bundle?) {
    
    activity.window.setFlags(
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
            )
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_manual_detail_user)
    initView()
    setEvent()
    setLayoutForFullScreen(frameLayoutRoot, toolBar)
    supportPostponeEnterTransition()
    getData()
}


private fun getData(){
   
        //get image url path (string) from intent.
    
            val options = RequestOptions().dontAnimate().signature(ObjectKey(mSigString!!))
                .centerCrop()
                .skipMemoryCache(false)
                .diskCacheStrategy(DiskCacheStrategy.ALL).priority(Priority.HIGH)

            Glide.with(context).load(url).apply(options).listener(object :RequestListener<Drawable>{

                override fun onLoadFailed(
                    e: GlideException?,
                    model: Any?,
                    target: Target<Drawable>?,
                    isFirstResource: Boolean
                ): Boolean {

                    try{

                        context.runOnUiThread{

                            try{

                                supportStartPostponedEnterTransition()                              }catch(e:Exception){
                                ErrorController.showError(e)
                            }
                        }

                    }catch(e:Exception){
                        ErrorController.showError(e)
                    }
                    return true
                }

                override fun onResourceReady(
                    resource: Drawable?,
                    model: Any?,
                    target: Target<Drawable>?,
                    dataSource: DataSource?,
                    isFirstResource: Boolean
                ): Boolean {

                    try{

                        context.runOnUiThread{

                            try{

                                view.setImageDrawable(resource)
                                supportStartPostponedEnterTransition()

                            }catch(e:Exception){
                                ErrorController.showError(e)
                            }
                        }

                    }catch(e:Exception){
                        ErrorController.showError(e)
                    }
                    return true
                }
            }).submit()
}

Как я уже упоминал в своем первом Вопрос: сначала он медленный, но со второй попытки становится очень резким. Что мне не хватает?

1 Ответ

0 голосов
/ 14 августа 2020

Глупая проблема, вызванная моей глупой ошибкой, другая проблема с загрузкой изображения.

В список загружено изображение без подписи, а целевое действие загрузило его с подписью, что заставило его загрузить снова изображение из сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...