mTabHost.setOnTabChangedListener(new OnTabChangeListener()
{
@Override
public void onTabChanged(String tabId)
{
if(!left)
{
mTabHost.getCurrentView().startAnimation(translateLeftAnim);
}
else
{
mTabHost.getCurrentView().startAnimation(translateRightAnim);
}
}
});
이런 식으로 왼쪽 탭으로 갈땐 왼쪽애니메이션 오른쪽 탭으로 갈땐 오른쪽애니매이션을 사용했습니다.
문제는 탭이 넘어갈 때 이전 탭 화면이 사라지고 새 탭이 밀려들어온다는 것인데요.
이게 좀 보기 깔끔하지 못합니다.
기존 탭화면을 남겨둔 채로 새 탭화면이 미끄러져 들어올 수 있는 방법이 있는지 궁금합니다.
마비노기영웅전 프리미어서버 뉴키
-
다음에 직장을 구할 때는 퇴근을 도망이라고 부르지 않는 직업이 좋을 것 같다.
-
구글링하다가 봤는데, 이 글 보고 해결해서 답변 남깁니다.
mTabHost.getCurrentView().startAnimation(translateLeftAnim);
일단 이 코드 자체는 의도대로 잘 동작하네요.
탭은 그대로 남아있고 내용물만 움직이네요.
tab관련 리스너는 사용하지 않고
simplegesturelistner로 onfling이벤트 받아서 만들었습니다.
switch (tabHost.getCurrentTab()) {
case 0 :
if (direction) {
tabHost.setCurrentTab(1);
tabHost.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.left_in));
} else {
tabHost.setCurrentTab(3);
tabHost.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.right_in));
}
break;
대강 이런식으로 구현했습니다.
탭을 상속 받아서 구현하셔야 할듯합니다. (될지는 미지수입니다. 재구현 해야 할수도 있습니다.)
탭은 화면이 전환될때 기존의 탭화면을 모두 remove하고 다시 추가합니다.
remove하는 시점이 우선되기 때문에 새로운 화면이 보일때는 이미 사라진 다음이 되는것입니다.
그냥 머릿속으로 생각나는 꼼수 (검증은 안했습니다. ㅡㅡㅋ) 는...
탭 인디케이터의 터치이벤트를 강제로 정의해서 먼저 가로챈 다음에
새 뷰를 만들어서 이펙트를 넣고 아무런 이펙트(애니메이션) 없이 탭을 전환하는 방법도 있습니다.
(포커스 바꾸는등의 일을 해야하므로 마지막에 탭전환을 해야 할겁니다.)