首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >overridePendingTransition用于平滑地滑入和滑出活动

overridePendingTransition用于平滑地滑入和滑出活动
EN

Stack Overflow用户
提问于 2013-12-20 04:11:20
回答 5查看 51.8K关注 0票数 25

我很难弄清楚如何通过按一下按钮来滑入滑出活动。我想要的是用户按下一个按钮,然后屏幕就会滑动。我想要的方式是第一个活动(有按钮的那个)滑出到左边,而新的第二个活动从右边滑入。

使用下面的代码,当单击按钮时,第一个活动滑出到右侧,而我希望它滑出到左侧。然后,当它完成滑动时,剩下的只是一个瞬间的黑屏,然后第二个活动就会出现,并且不会滑入。

因此,第一个活动滑出了错误的方向,而下一个活动只是出现而不是滑动。我做错了什么?我有一个很难理解的XML文件,所以听到的是下面所有的代码。

第1项活动

@Override
public void onCreate(Bundle savedInstanceState) {

    playBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(MainMenu.this, Levels.class);
            startActivity(intent);
            overridePendingTransition(R.anim.enter_from_right, R.anim.exit_out_left);
        }
    });

第2项活动

@Override
public void onCreate(Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.levels);

    overridePendingTransition(R.anim.enter_from_left, R.anim.exit_out_right);

所以我认为我的一些XML文件可能是不正确的。他们来了。

enter_from_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="600"
        android:fromXDelta="100%"
        android:toXDelta="0%" >
    </translate>
</set>

enter_from_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="600"
        android:fromXDelta="-100%"
        android:toXDelta="0%" >
    </translate>
</set>

exit_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="600"
        android:fromXDelta="0%"
        android:toXDelta="-100%" >
    </translate>
</set>

exit_out_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="600"
        android:fromXDelta="0%"
        android:toXDelta="100%" >
    </translate>
</set>

编辑从第二个活动中删除overridePendingTransition(),这样第一个活动就滑到了左边,这就是我想要的。但是,当第一个活动滑走时,它仍然只会显示一个黑屏,而不是让第二个活动从右侧滑入。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-20 07:46:15

您只需在startActivity()调用之后立即覆盖动画,而不是覆盖startActivity()和新的activities onCreate()中的动画。

您为overridePendingTransition(int enterAnim, int exitAnim)提供的两个int对应于两个动画-移除旧的Activity并添加新的。

对于你的第二个问题,我相信你的fromXDelta设置是错误的,-100%应该完全偏离屏幕的左侧侧,而不是右侧,所以将其更改为100%应该可以修复它。

票数 26
EN

Stack Overflow用户

发布于 2017-10-22 16:16:03

看看我的要点,它工作得很完美:

1.覆盖CommonActivity的startActivity并完成

 @Override
    public void startActivity(Intent intent) {
        super.startActivity(intent);
        overridePendingTransition(R.anim.from_right_in, R.anim.from_left_out);
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out);
    }

2.from_left_in.xml

    <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="-100%p"
               android:toXDelta="0"
               android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
   </set>

3.from_right_in.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="100%p"
               android:toXDelta="0"              android:interpolator="@android:interpolator/accelerate_decelerate"
               android:duration="300"/>
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="300" />
</set>

4.from_left_out.xml

   <set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0"
               android:toXDelta="-100%p"
               android:duration="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

5.from_right_out.xml

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0"
               android:toXDelta="100%p"
               android:duration="300"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
</set>

要点链接:https://gist.github.com/JagieChen/f5cc44bf663f3722bd19097be47ccf9b

票数 12
EN

Stack Overflow用户

发布于 2014-02-02 18:53:20

不仅在enter_from_right动画中有错误,fromXDelta应该是100%而不是- 100%,而且即使在enter_from_left动画中,fromXDelta也应该是-100%而不是100%。

干杯,

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20690764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档