我有一个简单的比例动画:
val x = PropertyValuesHolder.ofFloat(View.SCALE_X, 0f, 2f)
val y = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0f, 2f)
val grow = ObjectAnimator.ofPropertyValuesHolder(imageViews[j].starViews[3], x, y).apply {
duration = 5000
}
imageView[].visibility = View.VISIBLE
AnimatorSet().play(grow)
当我将其添加到onTouchListener时,它可以很好地工作。但是,当我将其添加到onLongClickListener时,它不起作用。它仅可见,而动画不会发生
imageViews[j].starViews[2].setOnLongClickListener {
if (!imageViews[j].done && imageViews[j].intermediate) {
//The onTouchListener also has this if condition
val x = PropertyValuesHolder.ofFloat(View.SCALE_X, 0f, 2f)
val y = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0f, 2f)
val grow = ObjectAnimator.ofPropertyValuesHolder(imageView, x, y).apply {
duration = 5000
}
imageView.visibility = View.VISIBLE
AnimatorSet().apply {
Log.d("animCall", "called")
play(grow)
}
return@setOnLongClickListener true
}
return@setOnLongClickListener false
}
最佳答案
您将要创建一个minimal, reproducible example。这是一个例子:
val x = PropertyValuesHolder.ofFloat(View.SCALE_X, 0f, 2f)
val y = PropertyValuesHolder.ofFloat(View.SCALE_Y, 0f, 2f)
val grow = ObjectAnimator.ofPropertyValuesHolder(imageview, x, y).apply {
duration = 5000
}
imageview.setOnClickListener{
grow.start()
}
imageview.setOnLongClickListener{
grow.start()
return@setOnLongClickListener true
}
通常,AnimatorSet用于一次触发多个动画,对于您的单个缩放动画,只需在scaleMid2上调用.start()就足够了。
OnClick和OnLongClick都制作了相同的动画,这使我相信您的问题是
由于我拥有最低限度的可复制代码,因此可以将代码更改为此
imageview.setOnLongClickListener{
imageview.isFocusableInTouchMode = true
grow.start()
return@setOnLongClickListener true
}
并发现OnLongClickListener仍然可以正常工作(至少就我而言,这表明isFocusableInTouchMode是不必要的)。
然后,我只能假设问题出在您的if语句或其他代码中,您可以按照前面的步骤自行解决。