首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

运用 TabActivity 实现滑动翻页(带动画)和标签置底与定制效果

2012-09-24 
使用 TabActivity 实现滑动翻页(带动画)和标签置底与定制效果??? 花了一天功夫,把 TabActivity 捣鼓出了个

使用 TabActivity 实现滑动翻页(带动画)和标签置底与定制效果

??? 花了一天功夫,把 TabActivity 捣鼓出了个样子,差不多和自己所想的一致了,下图为滑动效果(带动画)。

运用 TabActivity 实现滑动翻页(带动画)和标签置底与定制效果

??? 其实做完后,才发现,TabActivity 并不难用,只需要你自己去扩展一些他的方法,就可以达到你自己想到效果。

? ? 不多说了,把实现动画的部分贴出现,其他的自己看源码吧。

?

@Overridepublic void setCurrentTab(int index) {  int mCurrentTabID = getCurrentTab();  if (null != getCurrentView()) {   // 第一次设置 Tab 时,该值为 null。   if (isOpenAnimation) {    if (mCurrentTabID == (mTabCount - 1) && index == 0) {     getCurrentView().startAnimation(slideLeftOut);    } else if (mCurrentTabID == 0 && index == (mTabCount - 1)) {     getCurrentView().startAnimation(slideRightOut);    } else if (index > mCurrentTabID) {     getCurrentView().startAnimation(slideLeftOut);    } else if (index < mCurrentTabID) {     getCurrentView().startAnimation(slideRightOut);    }   }  }  super.setCurrentTab(index);  if (isOpenAnimation) {   if (mCurrentTabID == (mTabCount - 1) && index == 0) {    getCurrentView().startAnimation(slideLeftIn);   } else if (mCurrentTabID == 0 && index == (mTabCount - 1)) {    getCurrentView().startAnimation(slideRightIn);   } else if (index > mCurrentTabID) {    getCurrentView().startAnimation(slideLeftIn);   } else if (index < mCurrentTabID) {    getCurrentView().startAnimation(slideRightIn);   }  }}


??? 不过是继承了 TabHost 组件类,并扩展了其 setCurrentTab(int index) 方法,不过有一个 Bug 没有解决,便当连续快速的滑动屏幕时,当 TabHost 加载的 view 或 activity 背景图为透明效果时,会出现重影现象。
??? 希望有高价解决。
??? 关于标签置底,其实可以查看 XML 文件得到答案,使用 TabActivity 时,其布局文件的顶级视图必须为 TabHost 控件,通过看 TabHost 的源码,可以看到,它其实就是一个 FrameLayout,包含了两个控件:FrameLayout mTabContent(展示我们加载的 View 或 Activity)? 和 TabWidget mTabWidget(展示 Tab 的标签,其实就是一个 LinearLayout),默认布局都是采用系统的,所以我们可以在自己的 XML 文件中,将这两个的顺序更换一下,就可以了,同样的,既然我们可以得到 TabWidget,那么就可以对其进行布局设计,制定效果也就可以实现了。

?????? 现在想来,QQ、UC这些漂亮的按钮滑动方式,会不会也是这样实现的呢,研究中…………

?

   谢谢分享,下载下来看看

热点排行