两个activity之间透明过渡效果和经验

来看下效果图:
这里写图片描述

大致效果解释:
1. 当用户点击登录时logo下滑一定距离
2. 下滑后旋转90时 变化图标
3. 继续旋转90度
4. 然后移动到左上角 透明度渐变到上个activity 最后销毁当前activity

术语

登录界面我们 称为 A (本质是activity) 如下图
这里写图片描述

返回界面我们 称为 B (本质是activity) 如下图
这里写图片描述

大致思路

让A界面的A的logo移动到左上角时候 我们让A界面透明到B
然后在finish() A 即可

注意: 结束A的时候(调用A的finish时候,会有一个闪屏 或者左移动的切换动画 切换到B 此时很突兀)

解决:在finish()后面自己写一个过渡动画(随便写就行 甚至可以不写任何效果,只是为了覆盖原来的默认过渡效果)

//结束A
finish();
//设置动画,第一个是进入动画第二个是出动画                      
overridePendingTransition(R.anim.scale_in, R.anim.scale_out);

具体代码步骤

  1. 定义一个样式 在values/style下创建一个主题样式:

    
        <style name="activityTheme" parent="@android:style/Theme">         
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@color/transparent</item> 
      <item name="android:windowContentOverlay">@null</item>
     </style> 
    

    代码解释

    <item name="windowBackground"> 窗体的背景 </item>
     <item name="android:windowContentOverlay">@null</item>  自定义Titlebar时去掉多余的阴影。
     <item name="android:windowIsTranslucent">false</item>    窗体是否半透明
  2. 让其A 继承此主题(在清单文件内继承)

      <activity
                android:name="A"
                android:theme="@style/activityTheme"
     />
  3. 让其A的根布局开启透明动画
    假设A的布局如下

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/ll_root"
        android:background="@color/all_bg"
        android:orientation="vertical" />
      AlphaAnimation alphaAnimation = new
                     AlphaAnimation(1.0f,0.0f);
                      alphaAnimation.setDuration(2*1000);
                     alphaAnimation.setFillAfter(true);
        //透明度 变化 alphaAnimation.setAnimationListener(new
                     alphaAnimation.setAnimationListener(new AnimationListener() {
    
                        @Override
                        public void onAnimationStart(Animation animation) {
                            // TODO Auto-generated method stub
    
                        }
    
                        @Override
                        public void onAnimationRepeat(Animation animation) {
                            // TODO Auto-generated method stub
    
                        }
    
                        @Override
                        public void onAnimationEnd(Animation animation) {
    
                            finish();
    overridePendingTransition(R.anim.scale_in, R.anim.scale_out);
                        }
                    });
      ll_root.startAnimation(alphaAnimation);  

这里随便给大家看一个进入的动画源码吧

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
   <scale  
          android:fromYScale="0.0"
          android:toYScale="1.0"
          android:pivotY="50%"
          android:fillAfter="false"
          android:duration="200" />
</set>

补充

以下属性以Dialog为例来讲解:

<item name="windowBackground"> 窗体的背景 </item>
<item name="windowFrame">Dialog 是否有边框 </item>
<item name="windowNoTitle">窗体是否有标题</item>
<item name="windowFullscreen">false</item>        是否为全屏
<item name="windowOverscan">false</item>          是否要求窗体铺满整屏幕               
<item name="windowIsFloating">false</item>        窗体是否浮在下层之上
<item name="windowContentOverlay">@null</item>    设置窗体内容背景
<item name="windowShowWallpaper">false</item>     是否显示壁纸
<item name="windowTitleStyle">@android :style/WindowTitle</item>        窗体的标题栏Style
<item name="windowTitleSize">25dip</item>                              窗体文字大小

 窗体标题栏背景
<item name="windowTitleBackgroundStyle">@android :style/WindowTitleBackground</item>            窗体切换时的动画样式
<item name="android:windowAnimationStyle">@android :style/Animation.Activity</item>

 在使用输入法时窗体的适配
<item name="android:windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
<item name="windowActionBar">false</item>                    是否打开ActionBar
<item name="windowActionModeOverlay">false</item>            这个暂时不知道,希望大神能回答一下。
<item name="windowCloseOnTouchOutside">false</item>          是否再点击外部可关闭

<item name="android:windowIsTranslucent">false</item>    窗体是否半透明
<item name="android:backgroundDimEnabled">false</item>: 背景是否模糊显示

   6. <item name="android:windowContentOverlay">@null</item>  自定义Titlebar时去掉多余的阴影。

补充知识的原作者

posted on   木鱼哥  阅读(213)  评论(0编辑  收藏  举报

编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示