如何实现从左到右的animation来启动活动

我正在研究一个演示应用程序,我想在应用程序启动任何activity时应用animation。 我写下面的代码,但这是为了从左到右的animation活动。

left_to_right.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="500"/> </set> 

right_to_left.xml

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:duration="500" android:fromXDelta="0%" android:fromYDelta="0%" android:toXDelta="100%" android:toYDelta="0%" /> </set> 

我在这里开始一个这样的activity

 startActivity(new Intent(this, LoginActivity.class)); overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); 

我想实现从左到右的animation。 如何做到这一点。

提前致谢。

对你的animation文件做这些修改:

enter.xml:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:duration="500" android:fromXDelta="100%" android:fromYDelta="0%" android:toXDelta="0%" android:toYDelta="0%" /> </set> 

exit.xml:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:duration="500" android:fromXDelta="0%" android:fromYDelta="0%" android:toXDelta="-100%" android:toYDelta="0%" /> </set> 

你会从右到左滑动你的第二个活动。

为了更好地理解如何在animation中使用fromXDelta和toXDelta值,下面是关于值的一个非常基本的例子: X轴上的活动转换值

通过这种方式,您可以轻松理解为什么要为当前活动添加android:fromXDelta =“0%”和android:toXDelta =“ – 100%”。 这是因为你想要它从0%到-100%的位置。

[编辑]

所以如果你想从ActivityA中打开ActivityB,你可以做下面的事情(假设你有一个button):

 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(ActivityA.this, ActivityB.class)); overridePendingTransition(R.anim.enter, R.anim.exit); } }); 

现在,如果你想有第一个“倒退”animation,当你离开Activity B时,你需要在ActivityB的onBackPressed方法中有两个新的animation文件和一些代码,像这样:

首先是animation文件:left_to_right.xml:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:duration="500" android:fromXDelta="-100%" android:fromYDelta="0%" android:toXDelta="0%" android:toYDelta="0%" /> </set> 

right_to_left.xml:

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:duration="500" android:fromXDelta="0%" android:fromYDelta="0%" android:toXDelta="100%" android:toYDelta="0%" /> </set> 

并在ActivityB中执行以下操作:

 @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); } 

另外,如果您启用了导航,则在这种情况下也必须添加animation:

您启用UP导航像这样:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); } 

这也是你在这种情况下如何处理animation:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // Respond to the action bar's Up/Home button case android.R.id.home: //NavUtils.navigateUpFromSameTask(this); finish(); overridePendingTransition(R.anim.left_to_right, R.anim.right_to_left); return true; } return super.onOptionsItemSelected(item); } 

另外请注意,即使您的代码没有问题,您的手机也可能closures了animation。 要打开然后执行以下操作:

  1. 打开设置并转到开发人员选项
  2. 确保启用(通过滑动右上angular的切换button)
  3. 向下滚动,在绘图下方,逐个点击这些选项:Windowsanimation缩放,过渡animation缩放和animation制作时间缩放
  4. select“animation比例1x”

这有帮助吗?

应该在“目标”活动中调用overridePendingTransition 。 例如:从活动A – > B,你可以把overridePendingTransition调用放在Activity的onCreate中。

请记住,如果用户在系统级别上禁用了animation,则不能强制显示animation。

编辑:

一个例子看起来像这样:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); overridePendingTransition(R.anim.enter, R.anim.exit); } 

试试这个代码,它为我工作

从右向左滑动

 <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillAfter="true" > <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="0%" android:toXDelta="-50%" > </translate> </set> 

从左到右滑动

 <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fromXDelta="-50%" android:toXDelta="0%" > </translate>