我正在使用NineOldAndroids的ObjectAnimators来淡化Android Map v2标记,其代码如下:
mMarkerSelected = mMap.addMarker(new MarkerOptions()
.position(location.getLatLng())
.title(location.getName())
.snippet(location.getId())
.icon(BitmapDescriptorFactory.defaultMarker(location.getMarkerHue())));
mMarkerSelected.setAlpha(0.0f);
ObjectAnimator.ofFloat(mMarkerSelected, "alpha", 0.0f, 1.f)
.setDuration(300).start();
这与apk的可调试版本完美配合。
然而,当我签署我的apk并使用ProGuard时,突然标记不会淡入。我的猜测是alpha属性已被混淆,因此将"alpha"
传递到ObjectAnimator.ofFloat
不匹配使用Marker
的模糊alpha属性。如何在使用ProGuard时使动画生效?
为了完整起见,这是我的proguard-rules.txt
的唯一内容-dontwarn com.squareup.okhttp.**
答案 0 :(得分:10)
它使用反射,因此你需要你的方法名称完整,即。 setAlpha(),在你的proguard配置中是这样的:
# This is due to ObjectAnimator using reflection to access get/sets
-keep class com.your.package.ClassThatUsesObjectAnimator { *; }
答案 1 :(得分:2)
Nineolddroids库已经开源了,因此运行proguard是没有意义的。
如果你可以选择模糊自己的源文件或第三方开源库,那么选择你自己的源文件是明智的。
将这些行添加到proguard-project.txt
,您的应用程序将正常运行。
## Nineolddroid related classes to ignore
-keep class com.nineoldandroids.animation.** { *; }
-keep interface com.nineoldandroids.animation.** { *; }
-keep class com.nineoldandroids.view.** { *; }
-keep interface com.nineoldandroids.view.** { *; }