2016-04-15 44 views
2

SwipeRefreshLayout使用設置變量作爲結束動畫。在某些使用情況下,我需要將其更改爲0,但我無法弄清楚。這裏的變量:SwipeRefreshLayout - 更改動畫時機

private static final int SCALE_DOWN_DURATION = 150; 

任何幫助將不勝感激。

+0

可能是最好的只抓源和修改,以滿足您的需求 – ootinii

回答

0

您將需要訪問專用字段,並使用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的實現細節沒有保證,這將不無警示未來突破。如果你需要這樣的幾個修改,然後分班和維護自己的版本可能是一個更好的解決方案。

+0

「無法解析法‘getDeclaredModifiers(java.lang.String中)’」 – Psest328

+0

更新方法名getDeclaredField(java.lang.String中) – fractalwrench

+1

的Java。 lang.NoSuchFieldException:類Ljava中沒有字段修飾符/ lang/reflect/Field; (聲明'java.lang.reflect.Field'出現在/system/framework/core-libart.jar中) – Psest328