滑动以切换Android上的标签,例如YouTube / Google音乐应用

时间:2011-06-15 06:54:21

标签: android listview tabactivity

在他们最新版本的应用中,Google已经实现了一种非常酷的方式,即在标签与点击标题标题之间进行滑动。我想知道是否有人对如何做到这一点有更具体的想法。

以下是一些想法 - 随意批评:

我最初的想法是,这不是承载儿童活动的标准TabActivity。事实上,我甚至认为它不是自定义ActivityGroup。滑动时,标签行会滚动,但不会导致活动标签切换。

刷选标签的主要内容表现出有趣的行为。我怀疑有一个GestureListener附加到主要内容区域。在滑动标签时,相邻标签的行变得可见。这似乎表明这是一个可水平滚动的ListView s组。它几乎就像一个可水平滚动的HTML div,其中所有内容已经存在但在刷卡时进入视图。我不确定如何处理行的渲染(传统上,当向上/向下滚动列表而不是左/右时,构建和显示行)。那也许它也是一个自定义的ListView实现呢?如果不是左右滚动,它的行为与您期望的常规ListView相同,包括下拉时的快速滚动和发光效果。

标签行可能是ScrollView,滑动到边缘时的发光效果就是证明。选项卡内容的行不是。

我正在尝试构建一个包含这个非常漂亮的UI的不同部分的心理模型。任何见解都非常感激。

6 个答案:

答案 0 :(得分:2)

如何完美地完成这项工作的最有价值的信息来源是来自IO 2011 application

的来源

查看ScheduleFragment和Workspace类。

感谢。

答案 1 :(得分:1)

主屏幕具有相同的比喻:多个页面,您可以在地平线上滑动,每个屏幕都可以完成它的工作。它具有“锁定”行为(如果你轻扫它会跳转到新标签,但是如果你没有滑动到足够的位置它会弹回到已经可见的屏幕),除了它而不是底部的小点。主屏幕使用选项卡作为您所在页面的指示器。

正如您所说,标签不会滚动。此外,在滑动过程中,您实际上不能垂直滚动,因此它实际上是一个简单的实现,类似于您可以找到的here。我想多点触控你可以让它垂直滚动,但它真的很奇怪,而且很大程度上是不必要的:很酷看,但实用性有限。除了标准ListView之外,ListView不需要做任何其他事情。顶部可能有一个自定义的基于按钮的选项卡小部件,并且基于滚动,按钮样式会更新以突出显示正确的选项卡。这就是它。

答案 2 :(得分:1)

Youtube应用的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
    ...
    <TabRow android:id="@id/tabrow" .../>
    <Workspace android:id="@id/workspace" ...>
        <ListView android:id="@id/uploads" ... />
        <ListView android:id="@id/favorites" ... />
        <ListView android:id="@id/playlists" ... />
        <ListView android:id="@id/subscriptions" ... />
    </Workspace>
</LinearLayout>
谷歌推出了两款也在音乐应用中使用的小部件:

  • com.google.android.youtube.ui.TabRow。

    TabRow扩展Horizo​​ntalScrollView

  • com.google.android.youtube.ui.Workspace

    Workspace扩展了ViewGroup

关于实施,好吧,任何人都可以使用“正确的工具”偷看。但这会给出一些粗略的代码,也许是不正确的代码。我试了一下,没有太多运气。我认为有些人有动力并且有goog技能。

其他解决方案和更好的解决方案:我希望Google尽快发布lib或这些类的代码。这个GUI真的很高兴使用。

答案 3 :(得分:1)

您可以将标签放在空框架内。

使用GestureDetector.SimpleOnGestureDetector方法覆盖onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)到该框架。

您可以在希望标签实际更改之前确定需要多大的强力。使用e1e2之间的累积距离。

请务必在fals上退回onFling e,否则触摸事件不会落到以下视图中。

答案 4 :(得分:1)

我认为你指的是Workspace-Pattern。不幸的是,谷歌并未将其作为标准,因此您必须自己实施。

为此,您应该使用ViewPagerFragmentPagerAdapterProgramming Example)。

答案 5 :(得分:0)

我相信我找到了你想要的解决方案。标签实际上位于应用的操作栏中:

http://developer.android.com/guide/topics/ui/actionbar.html#Tabs

此外, Android for Programmers - App-Driven Approach (ISBN 0132121360)的第14章完全专注于此操作栏标签系统。