Dit*_*mon 1 android proguard android-animation
我正在使用PropertyValuesHolder为我的Android应用程序中的某些视图设置动画.动画在我的设备上正常运行,直到我做了一个没有任何动画的版本构建.(我认为问题与模糊处理有关,因为属性名称被称为字符串名称,例如"Panel1W")
没有异常抛出.只是没有动画.我在http://proguard.sourceforge.net/index.html#manual/troubleshooting.html 上找到的最接近的东西是NoSuchMethodException,我们需要在proguard.cfg中使用-keep命令.我在proguard.cfg中尝试了以下内容但没有成功
-keep public class com.mycompany.myapp.HomeActivity { java.lang.Integer getPanel1W(); }
-keep public class com.mycompany.myapp.HomeActivity { void setPanel1W(java.lang.Integer); }
-keep public class com.mycompany.myapp.HomeActivity { java.lang.Integer getPanel2W(); }
-keep public class com.mycompany.myapp.HomeActivity { void setPanel2W(java.lang.Integer); }
-keep public class com.mycompany.myapp.HomeActivity { java.lang.Integer getPanel3W(); }
-keep public class com.mycompany.myapp.HomeActivity { void setPanel3W(java.lang.Integer); }
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?这是下面的代码.谢谢.
PropertyValuesHolder[] arrayOfPropertyValuesHolder = new PropertyValuesHolder[3];
arrayOfPropertyValuesHolder[0] = PropertyValuesHolder.ofInt("Panel1W", mPanel1.getWidth(), 0);
arrayOfPropertyValuesHolder[1] = PropertyValuesHolder.ofInt("Panel2W", 360, 1280);
arrayOfPropertyValuesHolder[2] = PropertyValuesHolder.ofInt("Panel3W", 0, (int)(screenWidth * 0.65));
ObjectAnimator localObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(this,
arrayOfPropertyValuesHolder).setDuration(time);
localObjectAnimator.setInterpolator(sCollapseInterpolator);
localObjectAnimator.start();
Run Code Online (Sandbox Code Playgroud)
我也有getter和setter方法.
public int getPanel1W() {
return ((ViewGroup.MarginLayoutParams) mPanel1.getLayoutParams()).width;
}
public void setPanel1W(int paramInt) {
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mPanel1.getLayoutParams();
lp.width = paramInt;
mPanel1.setLayoutParams(lp);
}
public int getPanel2W() {
return ((ViewGroup.MarginLayoutParams) mPanel2.getLayoutParams()).width;
}
public void setPanel2W(int paramInt) {
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mPanel2.getLayoutParams();
lp.width = paramInt;
mPanel2.setLayoutParams(lp);
}
public int getPanel3W() {
return ((ViewGroup.MarginLayoutParams) mPanel3.getLayoutParams()).width;
}
public void setPanel3W(int paramInt) {
ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mPanel3.getLayoutParams();
lp.width = paramInt;
mPanel3.setLayoutParams(lp);
}
Run Code Online (Sandbox Code Playgroud)
诀窍是这个方法调用的方法PropertyValuesHolder是set*或者get*,所以ProGuard保留这些方法的规则是:
void set*(***);
*** get*();
Run Code Online (Sandbox Code Playgroud)
因此,基于此,如果您的动画目标只是少数几个类中的一个,请为每个动画目标类添加:
-keep class my.package.MyClass {
void set*(***);
*** get*();
}
Run Code Online (Sandbox Code Playgroud)
如果所有目标都扩展了某个基类,则可以添加一个规则来保存它们:
-keep class * extends my.package.MyBaseClass {
void set*(***);
*** get*();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1371 次 |
| 最近记录: |