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

TabActivity动画实现与优化
本文详细介绍了如何使用TabActivity创建动画效果,并解决了快速滑动屏幕时出现的重影问题。通过扩展TabHost组件类的方法,实现了Tab切换的平滑过渡。同时,文章探讨了标签置底的调整方法及TabActivity的底层实现原理,为开发者提供了深入理解并优化TabActivity的思路。

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

animtab UI 截屏

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

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

 

@Override
public 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这些漂亮的按钮滑动方式,会不会也是这样实现的呢,研究中…………

 

新选项卡立即打开,而不是在后台。 ***根据要求提供的新功能***选项卡激活现在支持书签! ***有关权限的问题***请阅读所需权限的详细说明以及为什么需要它们。没有它们,选项卡激活将无法按所述方式工作。绝对不会更改或收集任何数据 ----------------------------------------默认情况下,Chrome在后台打开新标签页并没有提供立即切换到它们的选项。使用“选项卡激活”时,新选项卡将立即打开,而不是在后台打开。覆盖选项卡在后台激活并打开新选项卡,在打开新选项卡的同时按Shift键。标签激活功能可以有效地扭转Chrome的新标签焦点行为 ----------------------------------------权限阅读更改书签:需要激活书签的标签(仅读取书签,不更改)在访问的网站上读取更改您的所有数据:需要检测按下Shift键的时间(未访问其他网站数据)由于Chrome扩展API的限制,具有是否按Shift键或是否为新选项卡的URL添加了书签是检测请求的权限的唯一方法。绝对不会更改或收集任何数据 ----------------------------------------更改版本2.0.0根据要求,书签为现在受支持并立即打开。版本1.2.0:新标签页的位Chrome的行为更加匹配。新的活动标签在上一个标签的右侧打开,新的背景标签在末尾打开。版本1.1.0:Shift键将覆盖Tab激活并在后台打开新的选项卡。版本1.0.0:初始版本。 支持语言:English (United States)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值