Как я уже говорил в заголовке, переход разделяемых элементов между фрагментом и действием происходит медленно, только с первой попытки. Между переходом есть задержка в одну секунду, но когда я делаю это снова, он работает без каких-либо задержек.
Я использую 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()
}
Как я уже упоминал в своем первом Вопрос: сначала он медленный, но со второй попытки становится очень резким. Что мне не хватает?