Android SwipRefreshLayout-更改动画计时

Android SwipRefreshLayout-更改动画计时,android,view,swiperefreshlayout,Android,View,Swiperefreshlayout,SwipeRefreshLayout使用设置变量作为结束动画。在某些用例中,我需要将其更改为0,但我不知道如何更改。以下是变量: private static final int SCALE_DOWN_DURATION = 150; 非常感谢您的帮助。您需要使用Java反射API访问private字段,并将值更新为0。由于该字段是最终字段,因此需要更新其修改器以删除此信息,如中所述 这应该不言而喻,但由于这是SwipeRefreshLayout的一个实现细节,因此不能保证在未来没有警告的情况下

SwipeRefreshLayout使用设置变量作为结束动画。在某些用例中,我需要将其更改为0,但我不知道如何更改。以下是变量:

private static final int SCALE_DOWN_DURATION = 150;

非常感谢您的帮助。

您需要使用Java反射API访问private字段,并将值更新为0。由于该字段是最终字段,因此需要更新其修改器以删除此信息,如中所述


这应该不言而喻,但由于这是SwipeRefreshLayout的一个实现细节,因此不能保证在未来没有警告的情况下不会中断。如果您需要像这样的多次修改,那么分叉类并维护自己的版本可能是更好的解决方案。

“无法解析方法'getDeclaredModifiers(java.lang.string)'”将方法名称更新为getDeclaredField(java.lang.string)java.lang.NoSuchFieldException:Ljava/lang/reflect/field类中没有字段修饰符;(声明'java.lang.reflect.Field'出现在/system/framework/core libart.jar中)最好只获取源代码并修改它以满足您的需要
Field duration = SwipeRefreshLayout.class.getDeclaredField("SCALE_DOWN_DURATION");
duration.setAccessible(true); // counteract private modifier

Field mods = Field.class.getDeclaredField("modifiers"); // retrieve modifiers for the constant field
mods.setAccessible(true);
int finalValue = mods.getModifiers() & ~Modifier.FINAL; // flip final value, allowing mutation of the field
mods.setInt(mods, finalValue);
duration.setInt(hack, 0); // set value