如何为Activity转换的各个视图设置动画?

时间:2012-08-13 20:23:56

标签: android android-layout android-animation android-view

切换活动时如何触发各个视图的动画? 即如果用户单击按钮转到下一页,我希望我的一些视图可以飞离屏幕,并将背景交叉淡入淡出到下一个屏幕,而不是将整个屏幕设置为一个动画。

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

编辑:目前,通过在onResume()中调用它来进行转换动画工作正常,但是当我按下时,活动切换的速度比onPause()中启动的任何动画都要快,这让我觉得有更好的这样做的方式/地点。

2 个答案:

答案 0 :(得分:2)

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

  1. 在res文件夹中,创建一个动画文件夹
  2. 例如,将两个xml文件放入幻灯片中。
  3. slide_in.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);
      
    2. 如果您在真实设备上进行测试,请不要忘记允许它播放动画(设置 - &gt;显示 - &gt;动画 - &gt;所有动画)

      希望它有所帮助!:)

答案 1 :(得分: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代码,但希望足以让你明白这个想法。祝你好运!