问题描述
我正在尝试使用以下代码为回收视图中的项目设置动画:
my_recyclerview.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
viewTreeObserver.removeOnPreDrawListener(this)
for (i in 0 until childCount) {
val view: View = getChildAt(i)
val translationValue = if (layoutManager?.width != null) -layoutManager!!.width.toFloat() else 0f
view.translationX = translationValue
val translationAnimator: Animator = ObjectAnimator.ofFloat(
view,"translationX",translationValue,0f
)
translationAnimator.duration = 300
translationAnimator.startDelay = i * 50.toLong()
translationAnimator.start()
}
return true
}
})
它在调试模式下没有任何问题:项目从侧面一个一个地“滑入”。 但是,当我生成使用 proguard 的发布 apk 时,没有抛出任何错误,但动画根本不起作用。
编辑以澄清我确实在不使用 Proguard 的情况下尝试了发布版本(minifyEnabled false),并且动画效果很好,所以它必须是混淆。
我试图在 proguard 中包含一些“保留”规则以保留 ObjectAnimator,甚至是整个 android.animation 包,但要么我没有正确设置规则,要么我错过了其他东西。
例如,我试过:
-keep class android.animation.ObjectAnimator {*;}
以及
-keep class android.animation.ObjectAnimator.** {*;}
还有这个我在谷歌上找到的:
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
void set*(***);
*** get*();
}
(上次编辑) 还尝试包含最严格的规则:
-keep class android.animation.ObjectAnimator { *; }
-keep class android.animation.ObjectAnimator {
void set*(***);
*** get*();
}
-keepclassmembers class android.animation.ObjectAnimator {
void set*(***);
*** get*();
}
-keep class android.widget.FrameLayout { *; }
-keep class android.widget.FrameLayout {
void set*(***);
*** get*();
}
-keepclassmembers class android.widget.FrameLayout {
void set*(***);
*** get*();
}
-keep class android.view.View { *; }
-keep class android.view.View {
void set*(***);
*** get*();
}
-keepclassmembers class android.view.View {
void set*(***);
*** get*();
}
此时我尝试了很多选择,我完全迷失了。
没有任何效果。任何帮助或指导将不胜感激
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)