Android第四十四期 - 登录界面的动画

简介:

    这次是需求有点无语,不过还是做出来了,效果如下,这回要讲讲,有点复杂,以后自己估计都忘了,记录一下--!

    wKioL1WgrsyzF6XNAAUkmqxf620596.gif

    动画类AnimalUtul:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public  class  AnimalUtul {
     private  AnimatorSet mAnimatorSet;
     RelativeLayout rl_parent;
     private  ImageView iv_logo;
     private  float  mLogoY;
     private  Context context;
     private  long  starttime =  1500 ;
 
     public  long  getStarttime() {
         return  starttime;
     }
 
     public  void  setStarttime( long  starttime) {
         this .starttime = starttime;
     }
 
     public  AnimalUtul(Context context, RelativeLayout layout, ImageView logo) {
         iv_logo = logo;
         rl_parent = layout;
         this .context = context;
         iv_logo.postDelayed( new  Runnable() {
             @Override
             public  void  run() {
                 if  (mLogoY ==  0 ) {
                     mLogoY = ViewHelper.getY(iv_logo);
                 }
                 playLogoInAnim();
             }
         }, starttime);
         iv_logo.postDelayed( new  Runnable() {
             @Override
             public  void  run() {
                 playInAnim();
             }
         }, starttime);
 
     }
 
     public  void  playInAnim() {
         rl_parent.setVisibility(View.VISIBLE);
 
         AnimatorSet mAnimatorSet;
         ObjectAnimator anim3 = ObjectAnimator.ofFloat(rl_parent,  "y" ,
                 DisplayUtil.getDisplayheightPixels(context),
                 DisplayUtil.dip2px(context,  160 ));
 
         mAnimatorSet =  new  AnimatorSet();
         mAnimatorSet.play(anim3);
         mAnimatorSet.setDuration( 1000 );
         mAnimatorSet.start();
     }
 
     private  void  playLogoInAnim() {
         ObjectAnimator anim1 = ObjectAnimator.ofFloat(iv_logo,  "scaleX" 1 .0f,
                 0 .5f);
         ObjectAnimator anim2 = ObjectAnimator.ofFloat(iv_logo,  "scaleY" 1 .0f,
                 0 .5f);
         ObjectAnimator anim3 = ObjectAnimator.ofFloat(iv_logo,  "y" , mLogoY,
                 DisplayUtil.dip2px(context,  15 ));
 
         if  (mAnimatorSet !=  null  && mAnimatorSet.isRunning()) {
             mAnimatorSet.cancel();
             mAnimatorSet =  null ;
         }
         mAnimatorSet =  new  AnimatorSet();
         mAnimatorSet.play(anim1).with(anim2);
         mAnimatorSet.play(anim2).with(anim3);
         mAnimatorSet.setDuration( 1000 );
         mAnimatorSet.start();
     }
}

    适配屏幕高度类DisplayUtil:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public  class  DisplayUtil {
 
     /** 屏幕宽度   */
     private  static  int  DisplayWidthPixels =  0 ;
     /** 屏幕高度   */
     private  static  int  DisplayheightPixels =  0 ;
 
     /**
      * 获取屏幕参数
      * @param context
      */
     private  static  void  getDisplayMetrics(Context context) {
         DisplayMetrics dm =  new  DisplayMetrics();
         ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(dm);
         // 宽度
         DisplayWidthPixels = dm.widthPixels;
         // 高度
         DisplayheightPixels = dm.heightPixels;
     }
 
     /**
      * 获取屏幕宽度
      * @param context
      * @return
      */
     public  static  int  getDisplayWidthPixels(Context context) {
         if  (context ==  null ) {
             return  - 1 ;
         }
         if  (DisplayWidthPixels ==  0 ) {
             getDisplayMetrics(context);
         }
         return  DisplayWidthPixels;
     }
 
     /**
      * 获取屏幕高度
      * @param context
      * @return
      */
     public  static  int  getDisplayheightPixels(Context context) {
         if  (context ==  null ) {
             return  - 1 ;
         }
         if  (DisplayheightPixels ==  0 ) {
             getDisplayMetrics(context);
         }
         return  DisplayheightPixels;
     }
 
     /**
      * 将px值转换为dip或dp值 
      *
      * @param pxValue
      * @return
      */
     public  static  int  px2dip(Context context,  float  pxValue) {
         final  float  scale = context.getResources().getDisplayMetrics().density;
         return  ( int ) (pxValue / scale +  0 .5f);
     }
 
     /**
      * 将dip或dp值转换为px值 
      *
      * @param dipValue
      * @return
      */
     public  static  int  dip2px(Context context,  float  dipValue) {
         final  float  scale = context.getResources().getDisplayMetrics().density;
         return  ( int ) (dipValue * scale +  0 .5f);
     }
 
     /**
      * 将px值转换为sp值 
      *
      * @param pxValue
      * @return
      */
     public  static  int  px2sp(Context context,  float  pxValue) {
         final  float  fontScale = context.getResources().getDisplayMetrics().scaledDensity;
         return  ( int ) (pxValue / fontScale +  0 .5f);
     }
 
     /**
      * 将sp值转换为px值 
      * @param spValue
      * @return
      */
     public  static  int  sp2px(Context context,  float  spValue) {
         final  float  fontScale = context.getResources().getDisplayMetrics().scaledDensity;
         return  ( int ) (spValue * fontScale +  0 .5f);
     }
}

    调用方法:new AnimalUtul(this,出现的layout,logo图片);

    唉~好累~天天写这些--!









本文转自 吴雨声 51CTO博客,原文链接:http://blog.51cto.com/liangxiao/1673192,如需转载请自行联系原作者
目录
相关文章
|
10天前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
35 2
基于Android P,自定义Android开机动画的方法
|
4月前
|
Android开发
定制Android关机界面
定制Android关机界面
36 0
|
25天前
|
开发工具 Android开发
|
7天前
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
18 0
|
2月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
49 12
|
1月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
很多文章都介绍了FTPClient如何连接ftp服务器,但却很少有人说如何连接一台开了SSL认证的ftp服务器,现在代码来了。
65 2
|
2月前
|
XML Android开发 UED
💥Android UI设计新风尚!掌握Material Design精髓,让你的界面颜值爆表!🎨
【7月更文挑战第28天】随着移动应用市场的发展,用户对界面设计的要求不断提高。Material Design是由Google推出的设计语言,强调真实感、统一性和创新性,通过模拟纸张和墨水的物理属性创造沉浸式体验。它注重色彩、排版、图标和布局的一致性,确保跨设备的统一视觉风格。Android Studio提供了丰富的Material Design组件库,如按钮、卡片等,易于使用且美观。
77 1
|
2月前
|
XML Android开发 UED
Android动画之共享元素动画简单实践
本文介绍Android共享元素动画, 实现两Activity间平滑过渡特定UI元素。通过设置`transitionName`属性和使用`ActivityOptions.makeSceneTransitionAnimation`启动目标Activity实现动画效果。可自定义过渡动画提升体验。
39 0
|
2月前
|
XML Android开发 数据安全/隐私保护
使用RelativeLayout布局Android界面
使用RelativeLayout布局Android界面
|
3月前
|
Android开发 UED
Android Item平移动画
【6月更文挑战第18天】