如何在安卓系统中实现类似 iPhone 的动态翻转屏幕?

6

我正在通过Web服务解析数据。我希望水平翻转而不是垂直翻转。这里有一个使用ViewFlipper的教程,但它是针对静态数据的。


这是我们的代码,我们需要在2个活动之间实现翻转:

Splash.java

public class Splash extends Activity{

        /** Called when the activity is first created. */

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.main);

                    startActivity(new Intent(Splash.this, MainMenu.class));
                    Splash.this.finish();                                     
        }
    }

Splash.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/splash">
</AbsoluteLayout>

Menu.java

public class Menu extends Activity{

        /** Called when the activity is first created. */

        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);               
            setContentView(R.layout.menu);                                       
        }
    }

Menu.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/menu">
</AbsoluteLayout>

请查看此答案 - Praveen
2
你是什么意思说“这里有一个使用ViewFlipper的教程”? - IgorGanapolsky
4个回答

19

您可以使用addView动态向ViewFlipper添加页面。

  flipper= (ViewFlipper) findViewById(R.id.flipper1);
  flipper.addView(myView,myViewIndex);

其中myView是您要添加的视图,myViewIndex是您想要将此新视图添加到viewflipper中的索引。

然后,您可以设置在更改视图时执行的动画:

  flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.left_in));
  flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.left_out));

然后您可以使用以下方式翻到该页面:

  flipper.setDisplayedChild(myViewIndex);

left_in.xml的定义如下:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
  android:interpolator="@android:anim/accelerate_interpolator">
    <translate
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fromXDelta="100%p"
    android:toXDelta="0" 
    android:duration="300"
    />
</set>

而 left_out.xml 是:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator"
    >
    <translate
    android:interpolator="@android:anim/decelerate_interpolator"
    android:fromXDelta="0" 
    android:toXDelta="-100%p" 
    android:duration="300"
    />
</set>

假设我们有两个活动及其各自的XML文件: 启动画面活动->splash.xml 菜单活动->menu.xml 现在我们如何在这两个活动之间切换?也就是从启动画面到菜单,反之亦然。 - Muhammad Maqsoodur Rehman
如果它们是两个不同的活动,那么这就是一个完全不同的问题,因为您不会使用ViewFlipper。如果它们只是在XML中定义的两个不同视图,则只需将它们都添加到viewflipper中,并使用setDisplayedChild来在它们之间进行翻转。 - stealthcopter
我明白了!在安卓系统中,也可以像iPhone一样在两个不同的活动之间翻转。请您根据上述情况发布所需的代码。因为这是我们第一次尝试这样做。 - Muhammad Maqsoodur Rehman
我添加了另一个答案,现在我更好地理解了你的问题。 - stealthcopter
我们的代码在Android 2.0上运行正常,但在1.6上无法运行。不知道1.6所需的代码是什么?非常感谢您的意见和技术帮助。 - Muhammad Maqsoodur Rehman
我尝试使用这个,但是遇到了困难。我按照你的代码进行操作,但当我显示我的视图时,它变成了已经显示的视图和我想要翻转的视图的混合体。你有什么想法我哪里出错了吗? - Donal Rafferty

3

我为您快速查找了一下,因为我确定以前见过它,我在developer.android.com上找到了这个

public void overridePendingTransition (int enterAnim, int exitAnim)

Since: API Level 5
Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.
Parameters
enterAnim   A resource ID of the animation resource to use for the incoming activity. Use 0 for no animation.
exitAnim    A resource ID of the animation resource to use for the outgoing activity. Use 0 for no animation.

所以,您可以向意图添加此额外参数,该参数将定义您调用的活动在新活动进入和旧活动退出时如何进行动画。


正确并且运行良好... 更多信息可以在http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/Animation.html找到。 还有一件重要的事情... 正如stealthcopter所提到的,此方法支持API Level 5及以上。 - Usman Masood

1

给定的链接已不再可用。 - Second Person Shooter
1
@LetMeBeYourLostDisciple 这个链接很老,但我已经更新了它。 - Blundell

-4
你是否只想让屏幕根据加速度传感器确定的位置旋转?
如果是,只需添加:
android:screenOrientation="sensor"

将此添加到您的AndroidManifest.xml文件中的Activity节点中


与加速度计无关。我希望我的页面/屏幕像iPhone一样翻转。 - Muhammad Maqsoodur Rehman
那么你是在问翻转动画吗?我的iPhone经验有限,所以当你说“像iPhone上一样翻转”时,我并不完全清楚。抱歉。 - snctln

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接