При добавлении TextView
и двух ImageView
s к root ConstraintLayout
и программной установке ограничений, когда я устанавливаю Tag
s представлений, происходит нечто странное.
Вот как ясоздайте вышеупомянутые представления и добавьте их для просмотра:
val confirmLocationText = TextView(context!!)
confirmLocationText.text = "Confirm?"
confirmLocationText.textSize = 20f
confirmLocationText.typeface = Typeface.DEFAULT_BOLD
confirmLocationText.measure(0, 0)
val confirmLocationTickImage = ImageView(context!!)
confirmLocationTickImage.setImageResource(R.drawable.tick)
confirmLocationTickImage.scaleType = ImageView.ScaleType.CENTER_CROP
val confirmLocationCancelImage = ImageView(context!!)
confirmLocationCancelImage.setImageResource(R.drawable.cancel)
confirmLocationCancelImage.scaleType = ImageView.ScaleType.CENTER_CROP
arrayOf(confirmLocationCancelImage, confirmLocationTickImage,confirmLocationText).forEach {
it.id = View.generateViewId()
it.tag = confirmInterfaceTag
it.alpha = 0f
viewToBeCreated?.eventMapFragmentRootConstraintLayout?.addView(it)
it.animate().alpha(1f).duration = confirmInterfaceFadeInFadeOutAnimation // Fade-In animation for Confirm Interface
}
И после этого куска кода я программно устанавливаю ограничения с помощью ConstraintSet
.
Проблема возникает в forEach
. Он запускается только дважды, но все три вида добавляются в любом случае (хотя один из ImageView
не имеет назначенного тега, но анимация работает). Когда я удаляю confirmLocationCancelImage
(или confirmLocationTickImage
) из arrayOf
, он снова запускается дважды, но на этот раз удаленный ImageView
не будет добавлен.
Так что я не понимаю:
1) Почему forEach
запускается дважды?
2) Когда он запускается дважды, почему добавляются три представления?
3) И когда он запускается дважды и тризатем добавляются представления, почему один из них пропускает тег?
Надеюсь, это не глупый вопрос, но мне показался странным и раздражающим. Заранее спасибо за помощь!
РЕДАКТИРОВАТЬ: Когда я изменяю код, как показано ниже, он работает, но я все еще не понимаю, почему он не работает, как указано выше ...
val confirmLocationText = TextView(context!!)
confirmLocationText.text = "Confirm?"
confirmLocationText.textSize = 20f
confirmLocationText.typeface = Typeface.DEFAULT_BOLD
confirmLocationText.measure(0, 0)
val confirmLocationTickImage = ImageView(context!!)
confirmLocationTickImage.apply {
setImageResource(R.drawable.tick)
id = View.generateViewId()
tag = confirmInterfaceTag
alpha = 0f
viewToBeCreated?.eventMapFragmentRootConstraintLayout?.addView(this)
animate().alpha(1f).duration = confirmInterfaceFadeInFadeOutAnimation
scaleType = ImageView.ScaleType.CENTER_CROP
}
val confirmLocationCancelImage = ImageView(context!!)
confirmLocationCancelImage.setImageResource(R.drawable.cancel)
confirmLocationCancelImage.scaleType = ImageView.ScaleType.CENTER_CROP
arrayOf(confirmLocationCancelImage,confirmLocationText).forEach {
it.id = View.generateViewId()
it.tag = confirmInterfaceTag
it.alpha = 0f
viewToBeCreated?.eventMapFragmentRootConstraintLayout?.addView(it)
it.animate().alpha(1f).duration = confirmInterfaceFadeInFadeOutAnimation // Fade-In animation for Confirm Interface
}