Android:使用单个资源在活动之间滑动

时间:2011-11-30 22:53:15

标签: android viewflipper

我有一个活动(A),其中列表视图打开第二个活动(B),显示与点击的行相关的详细信息。 使用以下代码打开活动(B):

Intent ident = new Intent(getApplicationContext(), DetailedActivity.class);
ident.putExtra("id", id);
startActivity(ident);

我想要的是当活动(B)打开时,能够向左或向右滑动以向上一个/下一个ListView行显示细节。 我找不到一种方法来使用ViewFlipper为不同的id重新加载相同的View ...

任何想法?

2 个答案:

答案 0 :(得分:5)

我认为ViewFlipper不是您想要使用的。您可以使用GestureDector获取左右滑动动作的回调。然后在你的回调中你可以做这样的事情:

OnRightSwipe(){
    Intent ident = new Intent(YourActivity.this, DetailedActivity.class);
    ident.putExtra("id", this.getIntent().getExtra("id") + 1);
    startActivity(ident);
}



OnLeftSwipe(){
    Intent ident = new Intent(YourActivity.this, DetailedActivity.class);
    ident.putExtra("id", this.getIntent().getExtra("id") - 1);
    startActivity(ident);
}

注意:

OnRightSwipe和OnLeftSwipe不是您必须查找回调内容的实际方法名称,我没有示例方便。

仅当您传递的ID以某种方式为数字时才可以递增和递减。如果情况并非如此,您将需要发布更多代码以便我提供帮助。此外,如果您的ID存储为额外的字符串,那么您必须先解析为int才能增加/减少。

最后请注意使用YourActivity.this而不是getApplicationContext()。由于您所在的活动是上下文,因此无需为此目的使用此方法。这有点过头了,但我认为方法getApplicationContext()和getBaseContext()会导致问题。

编辑:

如果您的意思与主屏幕的滚动方式类似,那么我认为没有内置的小部件会给您带来这种效果。获得它的最佳方式似乎是在homescreen source code中查看它们是如何做到的,然后复制那些尝试使其适合您自己的布局情况的内容。

如果您不想用刷子“跟随”:

如果您尝试翻转的两件事是单独的活动,那么ViewFlipper将不适用于此。 ViewFlipper用于在同一活动中的两个不同Layout对象之间进行切换。

我认为你可能接近在两个活动之间达到类似的效果,但在决定这样做之前你应该考虑一些事情。

  • 许多版本的操作系统已经有动画进出动画。用户可以选择将它们默认为关闭但是我们在大多数当前设备出售时都会打开它们。这意味着你最终可能会看到你的幻灯片动画,然后是系统动画,然后是系统动画,然后你的幻灯片。我不确定这是否会发生但我认为可能,我想如果是这样的话有办法解决它。
  • 活动B必须以某种方式告诉活动B的新实例(可能使用另一个putExtra)从哪个方向滑入。

要在两个活动之间实现滑出式动画幻灯片,您可以在xml中将根布局设置为android:visibility="gone",然后在调用setContentView(R.id.yourLayout);之后在onCreate()内部设置设置slideInAnimation并获取对根布局的引用并在其上开始滑动。然后就在你的滑动监听器中调用startActivity()之前(你必须设置一个animationListener来获取一个回调,在动画完成之后,你需要将startActivity()调用移动到你的回调中)可以在根布局参考上设置开始动画。

但是我可能会建议,无论你在上面哪一个,你都应该考虑一个模型,你的细节活动不只是显示1个静态记录,而是你开始一个新的活动来显示上一个或下一个。相反,它能够使用ViewFlipper在详细活动的一个实例中循环遍历它们。如果你使用这种方式,那么你将使用ViewFlipper并使用yes,你可以将它与fling监听器结合使用。你可以自己捣碎它们或查看ViewSwiper that @CommonsGuy made它是为此而建的,随时可以放入我们项目的玩具中。

答案 1 :(得分:2)

我只是在这里找到我需要的所有内容:ViewPager 实现一个好的效果并不需要太多的努力。