问题描述
我需要创建一些Tabhost表单分页.切换选项页面时,禁忌列中有滑动动画效果.
我想实现页面也有滑动动画效果.怎么样?我检查它使用Tabhost或Activeground表示的参考.但我不知道该怎么办.
是任何人可以给我一些建议吗?谢谢!
推荐答案
试用此代码:
import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; /** * A custom OnTabChangeListener that uses the TabHost its related to to fetch information about the current and previous * tabs. It uses this information to perform some custom animations that slide the tabs in and out from left and right. * * @author Daniel Kvist * */ public class AnimatedTabHostListener implements OnTabChangeListener { private static final int ANIMATION_TIME = 240; private TabHost tabHost; private View previousView; private View currentView; private int currentTab; /** * Constructor that takes the TabHost as a parameter and sets previousView to the currentView at instantiation * * @param tabHost */ public AnimatedTabHostListener(TabHost tabHost) { this.tabHost = tabHost; this.previousView = tabHost.getCurrentView(); } /** * When tabs change we fetch the current view that we are animating to and animate it and the previous view in the * appropriate directions. */ @Override public void onTabChanged(String tabId) { currentView = tabHost.getCurrentView(); if (tabHost.getCurrentTab() > currentTab) { previousView.setAnimation(outToLeftAnimation()); currentView.setAnimation(inFromRightAnimation()); } else { previousView.setAnimation(outToRightAnimation()); currentView.setAnimation(inFromLeftAnimation()); } previousView = currentView; currentTab = tabHost.getCurrentTab(); } /** * Custom animation that animates in from right * * @return Animation the Animation object */ private Animation inFromRightAnimation() { Animation inFromRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(inFromRight); } /** * Custom animation that animates out to the right * * @return Animation the Animation object */ private Animation outToRightAnimation() { Animation outToRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(outToRight); } /** * Custom animation that animates in from left * * @return Animation the Animation object */ private Animation inFromLeftAnimation() { Animation inFromLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(inFromLeft); } /** * Custom animation that animates out to the left * * @return Animation the Animation object */ private Animation outToLeftAnimation() { Animation outtoLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(outtoLeft); } /** * Helper method that sets some common properties * @param animation the animation to give common properties * @return the animation with common properties */ private Animation setProperties(Animation animation) { animation.setDuration(ANIMATION_TIME); animation.setInterpolator(new AccelerateInterpolator()); return animation; } }
其他推荐答案
您可以使用 ViewPager 和页面inder .
与较旧的Android版本以及更多选项.
使用 ViewPagePagerIncicator lib https://github.com/jakewharton/android-viewpagerindicator/
问题描述
I need to create some TabHost form paging. There is sliding animation effects in TabHost column when switching options page.
I want to implement the page also has sliding animation effects. How to so this? I check the reference it said using Tabhost or ActivityGround. But I do not know how to do.
Is anyone can give me some advice? Thanks!
推荐答案
try this code:
import android.view.View; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; /** * A custom OnTabChangeListener that uses the TabHost its related to to fetch information about the current and previous * tabs. It uses this information to perform some custom animations that slide the tabs in and out from left and right. * * @author Daniel Kvist * */ public class AnimatedTabHostListener implements OnTabChangeListener { private static final int ANIMATION_TIME = 240; private TabHost tabHost; private View previousView; private View currentView; private int currentTab; /** * Constructor that takes the TabHost as a parameter and sets previousView to the currentView at instantiation * * @param tabHost */ public AnimatedTabHostListener(TabHost tabHost) { this.tabHost = tabHost; this.previousView = tabHost.getCurrentView(); } /** * When tabs change we fetch the current view that we are animating to and animate it and the previous view in the * appropriate directions. */ @Override public void onTabChanged(String tabId) { currentView = tabHost.getCurrentView(); if (tabHost.getCurrentTab() > currentTab) { previousView.setAnimation(outToLeftAnimation()); currentView.setAnimation(inFromRightAnimation()); } else { previousView.setAnimation(outToRightAnimation()); currentView.setAnimation(inFromLeftAnimation()); } previousView = currentView; currentTab = tabHost.getCurrentTab(); } /** * Custom animation that animates in from right * * @return Animation the Animation object */ private Animation inFromRightAnimation() { Animation inFromRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(inFromRight); } /** * Custom animation that animates out to the right * * @return Animation the Animation object */ private Animation outToRightAnimation() { Animation outToRight = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(outToRight); } /** * Custom animation that animates in from left * * @return Animation the Animation object */ private Animation inFromLeftAnimation() { Animation inFromLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(inFromLeft); } /** * Custom animation that animates out to the left * * @return Animation the Animation object */ private Animation outToLeftAnimation() { Animation outtoLeft = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); return setProperties(outtoLeft); } /** * Helper method that sets some common properties * @param animation the animation to give common properties * @return the animation with common properties */ private Animation setProperties(Animation animation) { animation.setDuration(ANIMATION_TIME); animation.setInterpolator(new AccelerateInterpolator()); return animation; } }
其他推荐答案
you can done this by using ViewPager and PageIndicator.
for compatibly with older Android versions, and more options.
use ViewPagerIndicator Lib https://github.com/JakeWharton/Android-ViewPagerIndicator/