SwipeRefreshLayout使用設置變量作爲結束動畫。在某些使用情況下,我需要將其更改爲0,但我無法弄清楚。這裏的變量:SwipeRefreshLayout - 更改動畫時機
private static final int SCALE_DOWN_DURATION = 150;
任何幫助將不勝感激。
SwipeRefreshLayout使用設置變量作爲結束動畫。在某些使用情況下,我需要將其更改爲0,但我無法弄清楚。這裏的變量:SwipeRefreshLayout - 更改動畫時機
private static final int SCALE_DOWN_DURATION = 150;
任何幫助將不勝感激。
您將需要訪問專用字段,並使用Java反射API將值更新爲0。由於該字段是最終字段,因此您需要更新其修飾符以刪除此信息,如this post中所述。
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
這不用說,但因爲這是SwipeRefreshLayout的實現細節沒有保證,這將不無警示未來突破。如果你需要這樣的幾個修改,然後分班和維護自己的版本可能是一個更好的解決方案。
「無法解析法‘getDeclaredModifiers(java.lang.String中)’」 – Psest328
更新方法名getDeclaredField(java.lang.String中) – fractalwrench
的Java。 lang.NoSuchFieldException:類Ljava中沒有字段修飾符/ lang/reflect/Field; (聲明'java.lang.reflect.Field'出現在/system/framework/core-libart.jar中) – Psest328
可能是最好的只抓源和修改,以滿足您的需求 – ootinii