Android 如何在活动转换上设置单个视图的动画?

Android 如何在活动转换上设置单个视图的动画?,android,android-layout,android-animation,android-view,Android,Android Layout,Android Animation,Android View,切换活动时,如何在单个视图上触发动画? 也就是说,如果用户点击按钮进入下一页,我希望我的一些视图飞离屏幕,背景交叉淡入下一个屏幕,而不是将整个屏幕作为一个整体进行动画 这可能吗?如果是这样,应该如何做?(我使用的是最新的API 4.1,它不必向后兼容) 编辑:目前,通过在onResume()中调用动画来执行动画转换工作正常,但当我按back时,活动切换速度比在onPause()中启动的任何动画都快,因此我认为有更好的方法/位置来执行此操作。在以下活动之间切换时,可以设置动画(如幻灯片): 在re

切换活动时,如何在单个视图上触发动画? 也就是说,如果用户点击按钮进入下一页,我希望我的一些视图飞离屏幕,背景交叉淡入下一个屏幕,而不是将整个屏幕作为一个整体进行动画

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

编辑:目前,通过在onResume()中调用动画来执行动画转换工作正常,但当我按back时,活动切换速度比在onPause()中启动的任何动画都快,因此我认为有更好的方法/位置来执行此操作。

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

  • 在res文件夹中,创建动画文件夹
  • 例如,为幻灯片放置两个xml文件
  • 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>
    
    如果您正在真实设备上测试,请不要忘记允许它播放动画(设置->显示->动画->所有动画)

    希望有帮助!:)

    重写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
            }
        }
    }
    

    这是所有sudojava代码,但希望足够让您了解这个想法。祝你好运

    这将为整个活动设置动画,我希望分别为各个视图设置动画。哦,对不起,我的理解有误。你看到这个了吗?是的,但我需要知道在离开/启动活动时如何触发此类动画。然后只需重写onStop()、onResume()或onStart()方法即可触发。请参见下面的内容:覆盖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
            }
        }
    }