2017-05-03 71 views
0

我正在做一個介紹活動,其中包含三個片段的TabLayout。減速選項卡選擇動畫

我在我的TabLayout下有兩個按鈕 - 一個用於「跳過」介紹,另一個用於「下一個」屏幕/標籤。他們工作正常,但我想提出「下一步」功能的一些變化:

當我點擊「下一步」按鈕,他這樣做:

tabLayout.getTabAt(tabLayout.getSelectedTabPosition() + 1).select() 

而且他確實是在選擇下一個選項卡,但我想知道是否可以減慢製表符的幻燈片/交換動畫。我可以稍微覆蓋de動畫,這樣我可以減慢它的速度嗎?

編輯

我創建的延伸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,例如,以減慢動畫速度?

EDIT 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」不是要改變的正確值?

回答