3

切换活动时如何在单个视图上触发动画?即,如果用户单击一个按钮转到下一页,我希望我的一些视图飞出屏幕,并让背景交叉淡入淡出到下一个屏幕,而不是让整个屏幕作为一个整体进行动画处理。

这可能吗?如果是这样,应该怎么做?(我使用的是最新的 API 4.1,它不必向后兼容)

编辑:目前,通过在 onResume() 中调用它来进行过渡动画效果很好,但是当我按下返回时,活动的切换速度比在 onPause() 中启动的任何动画都快,所以这让我觉得有更好的方式/地方去做这个。

4

2 回答 2

2

覆盖 onResume() 可以正常工作,但 onPause/onStop 在移动到下一个屏幕之前不要等待动画完成。

什么开始事件前。按钮单击需要在调用启动活动之前启动动画。

button.setOnClickListener(new ViewOnClickListener() {

    @Override
    void onClick(... {

        // start animations
        // wait till they are finished
        // start activity
    }
});

由于启动新活动的每个事件都将具有动画代码,我还建议将其移动到某种帮助程序类中,以避免到处都有重复的代码。前任。

button1.setOnClickListener(new ViewOnClickListener() {

    @Override
    void onClick(... {

        helper.AnimateViews(/* probably pass activity or context */); 

        // start activity
    }
});

button2.setOnClickListener(new ViewOnClickListener() {

    @Override
    void onClick(... {

        helper.animateViews(/* probably pass activity or context */); 

        // start activity
    }
});

public class ViewAnimiationHelper {

    public void animateViews(Activity activity) {

        // find all views if not found then don't animate them
        View view1 = activity.findViewById(R.id.view1);

        if(view1 != null) {

            // animate view
        }

        View view2 = activity.findViewById(R.id.view1);

        if(view2 != null) {

            // animate view
        }
    }
}

这都是 sudo java 代码,但希望足以让您明白这一点。祝你好运!

于 2012-08-14T19:26:14.923 回答
2

当您在这样的活动之间切换时,您可以设置动画(如幻灯片):

  1. 在 res 文件夹中,创建一个 anim 文件夹
  2. 例如,为幻灯片放置两个 xml 文件。

幻灯片输入.xml

 <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="200"/>
  </set>

slie_out.xml

<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="200" />
    </set>
  1. 然后在你的java代码上写这个:

    Intent i = new Intent(YourActivity.this, OtherActivity.class);
        this.startActivity(i);
        overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
    

如果您在真实设备上进行测试,请不要忘记让它播放动画(设置 -> 显示 -> 动画 -> 所有动画)

希望能帮助到你 !:)

于 2012-08-13T20:34:23.823 回答