转换android片段向上滑动

 阿梓喵1995 发布于 2023-02-10 04:18

我有一个片段来替换另一个片段.我想指定动画.但动画被忽略了.

transaction.replace(R.id.my_fragment, newFrag);
transaction.addToBackStack(null);
transaction.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up);

slide_in_up



slide_out_up



我真正想要实现的是让新片段从底部滑入.我的动画被忽略了.什么是缺少的代码?

3 个回答
  • transaction.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_out_up);
    transaction.addToBackStack(null);
    transaction.replace(R.id.my_fragment, newFrag);
    

    slide_in_up

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0%p" />
    

    slide_out_up

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="-100%p" />
    

    2023-02-10 04:46 回答
  • slide_in_up的代码:

    <?xml version="1.0" encoding="utf-8"?>
        <set xmlns:android="http://schemas.android.com/apk/res/android">
            <translate xmlns:android="http://schemas.android.com/apk/res/android"
                android:duration="@android:integer/config_mediumAnimTime"
                android:fromYDelta="100%p"
                android:toYDelta="0%p" />
        </set>
    

    slide_in_down的代码:

    <?xml version="1.0" encoding="utf-8"?>
        <set xmlns:android="http://schemas.android.com/apk/res/android">
            <translate xmlns:android="http://schemas.android.com/apk/res/android"
               android:duration="@android:integer/config_mediumAnimTime"
               android:fromYDelta="0%p"
               android:toYDelta="100%p" />
        </set>
    

    slide_out_up的代码:

    <?xml version="1.0" encoding="utf-8"?>
        <set xmlns:android="http://schemas.android.com/apk/res/android">
           <translate
              android:duration="@android:integer/config_mediumAnimTime"
              android:fromXDelta="0"
              android:toYDelta="100%" />
        </set>
    

    slide_out_down的代码:

    <?xml version="1.0" encoding="utf-8"?>
       <set xmlns:android="http://schemas.android.com/apk/res/android">
            <translate
              android:duration="@android:integer/config_mediumAnimTime"
              android:fromXDelta="0"
              android:toYDelta="-100%" />
       </set>
    

    然后在你的活动或片段集动画如下:

        Fragment fragment = new Fragment();
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.setCustomAnimations(R.anim.slide_in_up, R.anim.slide_in_down, R.anim.slide_out_down, R.anim.slide_out_up);
        transaction.replace(container, fragment).commit();
    

    2023-02-10 04:51 回答
  • 自从提出这个问题以来已经有一段时间了,但这里是其他人来到这里的答案:

    e1da是正确的,因为setCustomAnimation()之前必须调用该呼叫replace().否则动画将不会显示.
    第二个问题是您可能正在使用无法使用视图动画设置动画的本机片段.

    使用以下文件:

    slide_in_up.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true" >
        <objectAnimator
            android:duration="500"
            android:propertyName="y"
            android:valueFrom="1280"
            android:valueTo="0"
            android:valueType="floatType" />
    </set>
    

    slide_out_up.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true" >
        <objectAnimator
            android:duration="500"
            android:propertyName="y"
            android:valueFrom="0"
            android:valueTo="-1280"
            android:valueType="floatType" />
    </set>
    

    一点解释:
    您必须区分一方面支持片段的视图动画和另一方面本机片段的属性动画.

    查看动画:
    是预备android 3.0的方式来动画视图.此示例代码是slide_in.xml和用户slide_up.xml3093402

    <?xml version="1.0" encoding="utf-8"?>
    <translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="100%p" />
    

    值得一提的是,您无法使用视图动画制作片段动画.例外是来自支持库(android.support.v4.app.Fragment)的片段.

    属性动画
    这是在android 3.0之后动画对象的方法.它也被声明为.xml文件,但使用"valueAnimator"标记(objectAnimator扩展valueAnimator).例子就是问题的答案.这是本机片段(android.app.Fragment)可以动画的方式.

    也可以看看:

    http://developer.android.com/guide/topics/graphics/overview.html

    通过动画在活动中交换片段

    希望这有帮助,

    编辑:正如Raphael Royer-Rivard指出的那样,固定屏幕尺寸是不好的做法.最好使用OS中的常量 getWindowManager().getDefaultDisplay().getMetrics(metrics).xdpi (参见DisplayMetrics).但我有一段时间没有做任何Android开发,所以我不知道哪一个.

    2023-02-10 04:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有