[英]Slow down tab select animation
我正在做一個包含三個片段的TabLayout的介紹活動。
我的TabLayout下面有兩個按鈕-一個用於“跳過”簡介,另一個用於“下一個”屏幕/選項卡。 它們工作正常,但我想對“下一步”功能進行一些更改:
當我單擊“下一步”按鈕時,他這樣做:
tabLayout.getTabAt(tabLayout.getSelectedTabPosition() + 1).select()
他的確在選擇下一個選項卡,但是我想知道是否可以放慢該選項卡的幻燈片/交換動畫。 我可以在某種程度上替代動畫,以便放慢速度嗎?
編輯
我創建了一個擴展TabLayout的自定義類:
public class CustomTabLayout extends TabLayout {
public CustomTabLayout(Context context) {
super(context);
}
public CustomTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
而且我注意到TabLayout類具有以下方法:
private void animateToTab(int newPosition) {
if (newPosition == Tab.INVALID_POSITION) { return; }
if (getWindowToken() == null || !ViewCompat.isLaidOut(this) || mTabStrip.childrenNeedLayout()) {
setScrollPosition(newPosition, 0f, true);
return;
}
final int startScrollX = getScrollX();
final int targetScrollX = calculateScrollXForTab(newPosition, 0);
if (startScrollX != targetScrollX) {
ensureScrollAnimator();
mScrollAnimator.setIntValues(startScrollX, targetScrollX);
mScrollAnimator.start();
}
mTabStrip.animateIndicatorToPosition(newPosition, ANIMATION_DURATION);
}
問題在於,ANIMATION_DURATION是在TabLayout類中設置為300的私有靜態最終常量。 我是否可以將此值稍微更改為1000以減慢動畫的播放速度?
編輯2
正如azizbekian所建議的那樣 ,我正在嘗試使用反射更改此值:
public CustomTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setAnimationDuration();
}
static void setAnimationDuration() {
try {
Field field = TabLayout.class.getDeclaredField("ANIMATION_DURATION");
field.setAccessible(true);
field.set(field.get(TabLayout.class), 2000);
int v = (int) field.get(TabLayout.class);
// v == 2000; so I guess that I changed the value successfully
} catch (Exception e) { e.printStackTrace(); }
}
但是創建我的標簽頁后,它的交易持續時間仍然相同(快)。 我在反射時做錯什么了嗎? 還是此“ ANIMATION_DURATION”不是要更改的正確值?
private static final int ANIMATION_DURATION = 300;
...
mScrollAnimator.setDuration(ANIMATION_DURATION);
因此,既不能通過樣式( xml
)也不能通過Java代碼進行配置。
您只能嘗試通過反射更改私有靜態最終字段的值 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.