android app退出动画,android – 关闭RecyclerView子大小更改动画

我有一个视图,我想在点击时更改其大小.

我有以下测试布局:

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/colorView"

android:layout_width="@dimen/colorSize"

android:layout_height="@dimen/colorSize"

android:layout_centerInParent="true"

app:normalSize="@dimen/colorSize"

app:selectedSize="@dimen/selectedColorSize" />

以下代码:

val colorView = findViewById(R.id.colorView)

colorView.setBackgroundColor(Color.RED)

colorView.setOnClickListener {

isSelected = !isSelected

colorView.setColorSelected(isSelected)

}

尺码变更代码:

fun setColorSelected(isSelected: Boolean) {

if (isColorSelected != isSelected) {

if (isSelected) {

setCurrentSize(selectedSize.toInt())

} else {

setCurrentSize(normalSize.toInt())

}

}

isColorSelected = isSelected

}

private fun setCurrentSize(size: Int) {

if (layoutParams.height != size || layoutParams.width != size) {

layoutParams.width = size

layoutParams.height = size

requestLayout()

}

}

它运作良好:

但是,如果我将此视图添加到RecyclerView,它会在大小更改上滞后:

class ColorsAdapter(colorsHex: List) : RecyclerView.Adapter() {

private val colors = mutableListOf()

private var selectedPosition: Int = 0

init {

colorsHex.forEach {

colors.add(Color.parseColor(it))

}

}

override fun getItemCount() = colors.size

override fun onBindViewHolder(holder: ViewHolder, position: Int) {

val color = colors[position]

holder.colorView.setBackgroundColor(color)

holder.colorView.tag = position

holder.colorView.setColorSelected(position == selectedPosition)

}

override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {

val inflater = LayoutInflater.from(parent?.context)

val view = inflater.inflate(R.layout.view_item_color, parent, false)

return ViewHolder(view)

}

inner class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {

val colorView: ColorView = itemView!!.findViewById(R.id.colorView)

init {

colorView.setOnClickListener {

val oldPosition = selectedPosition

selectedPosition = colorView.tag as Int

if (oldPosition != selectedPosition) {

notifyItemChanged(oldPosition)

notifyItemChanged(selectedPosition)

}

}

}

}

}

view_item_color.xml:

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="@dimen/selectedColorSize"

android:layout_height="@dimen/selectedColorSize">

android:id="@+id/colorView"

android:layout_width="@dimen/colorSize"

android:layout_height="@dimen/colorSize"

android:layout_gravity="center"

app:normalSize="@dimen/colorSize"

app:selectedSize="@dimen/selectedColorSize" />

正如我所看到的,它也试图改变尺寸变化的动画 – 这是真的吗?

以及如何解决这个滞后?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值