• 两个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时去掉多余的阴影。

    补充知识的原作者

  • 相关阅读:
    struts2第一天——入门和基本操作
    eclipse各种小图标含义
    复制web项目时注意修改web项目名
    AndroidCityPicker仿IOS选择效果
    每日五题(Spring)
    block-循环引用
    给EasyUi的Form加入自己主动填充部分输入框的方法
    智能停车O2O 独角兽初现:“ETCP停车”获5000万美金A轮融资
    解决移动端页面滚动后不触发touchend事件
    《从零開始学Swift》学习笔记(Day 61)——Core Foundation框架之内存管理
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152101.html
Copyright © 2020-2023  润新知