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
更新メソッド名に合わせて、それを修正するのが最善かもしれません。 lang.NoSuchFieldException:クラスLjava/lang/reflect/Fieldのフィールド修飾子がありません。 ( 'java.lang.reflect.Field'の宣言は/system/framework/core-libart.jarにあります) – fractalwrench
Javaへのニーズ – Psest328
だけでソースをつかむと、getDeclaredField(java.lang.Stringで) – ootinii