세 조각으로 된 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"이 (가) 올바른 값이 아닙니다. 당신이 see in sources 수있는