成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android登陸頁面仿拉鉤動效,你總會需要它!

移動開發(fā) Android
看到這個標(biāo)題是不是JH一緊,你可能會說我就沒遇到過,但是現(xiàn)在沒遇到不代表就遇不到,畢竟設(shè)計也是變幻莫測,只有你想不到的,沒有你不能實現(xiàn)的,說的這么吊,到底是啥效果?沒錯就是一個小小的登錄頁面,大家都有拉勾app吧,看拉勾的登錄頁做的很是平滑動畫,而且?guī)赢嬓Ч跃陀辛祟愃评吹卿浶Ч?/div>

[[187872]]

哈哈,看到這個標(biāo)題是不是JH一緊,你可能會說我就沒遇到過,但是現(xiàn)在沒遇到不代表就遇不到,畢竟設(shè)計也是變幻莫測,只有你想不到的,沒有你不能實現(xiàn)的,說的這么吊,到底是啥效果?沒錯就是一個小小的登錄頁面,大家都有拉勾app吧,看拉勾的登錄頁做的很是平滑動畫,而且?guī)赢嬓Ч跃陀辛祟愃评吹卿浶Ч鐖D: 

 

 

 

雖然是個簡單的頁面,但是涵蓋的東西不算少啊,很納悶為何谷歌一直不提供簡單,方便,準(zhǔn)確的鍵盤監(jiān)聽事件?惆悵啊,所以我們只能自己從側(cè)面監(jiān)聽鍵盤事件了,我們可以監(jiān)聽最外層布局的變化來判斷鍵盤是不是彈起了。閑話不多說,上車吧。

布局文件,大家都能看懂吧。 

 

 

 

我們要想監(jiān)聽鍵盤事件,首先我們想得到的是鍵盤彈起的時候我們可以去搞點事情,鍵盤搜起的時候我們再去搞點事情,知道這些還不夠,我們還要知道鍵盤彈起了多少,以及需要平移多少的距離。我們都知道我們的一個頁面彈起鍵盤的時候這個頁面的根布局會回調(diào)他的監(jiān)聽方法:addOnLayoutChangeListener( );當(dāng)鍵盤彈起的時候,我們的布局是變化了,因此會執(zhí)行這個回調(diào)方法,但是前提是必須設(shè)置我們的Activity的windowSoftInputMode屬性為adjustResize。

我們想讓布局整體平移的距離也就是彈起時候處于***部的view距離頂部的高度減去我們鍵盤的高度。現(xiàn)在認(rèn)為只要控件將Activity向上推的高度超過了1/3屏幕高,就認(rèn)為軟鍵盤彈起

  1.  scrollView.addOnLayoutChangeListener(new ViewGroup.OnLayoutChangeListener() { 
  2.             @Override 
  3.             public void onLayoutChange(View v, int leftint topint rightint bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
  4.               /* old是改變前的左上右下坐標(biāo)點值,沒有old的是改變后的左上右下坐標(biāo)點值 
  5.               現(xiàn)在認(rèn)為只要控件將Activity向上推的高度超過了1/3屏幕高,就認(rèn)為軟鍵盤彈起*/ 
  6.                 if (oldBottom != 0 && bottom != 0 && (oldBottom - bottom > keyHeight)) { 
  7.                     Log.e("wenzhihao""up------>"+(oldBottom - bottom)); 
  8.                     int dist = btn_login.getBottom() - bottom; 
  9.                     if (dist>0){ 
  10.                         ObjectAnimator mAnimatorTranslateY = ObjectAnimator.ofFloat(content, "translationY", 0.0f, -dist); 
  11.                         mAnimatorTranslateY.setDuration(300); 
  12.                         mAnimatorTranslateY.setInterpolator(new LinearInterpolator()); 
  13.                         mAnimatorTranslateY.start(); 
  14.                         zoomIn(logo, dist); 
  15.                     } 
  16.                     service.setVisibility(View.INVISIBLE); 
  17.  
  18.                 } else if (oldBottom != 0 && bottom != 0 && (bottom - oldBottom > keyHeight)) { 
  19.                     Log.e("wenzhihao""down------>"+(bottom - oldBottom)); 
  20.                     if ((btn_login.getBottom() - oldBottom)>0){ 
  21.                         ObjectAnimator mAnimatorTranslateY = ObjectAnimator.ofFloat(content, "translationY", content.getTranslationY(), 0); 
  22.                         mAnimatorTranslateY.setDuration(300); 
  23.                         mAnimatorTranslateY.setInterpolator(new LinearInterpolator()); 
  24.                         mAnimatorTranslateY.start(); 
  25.                         //鍵盤收回后,logo恢復(fù)原來大小,位置同樣回到初始位置 
  26.                         zoomOut(logo); 
  27.                     } 
  28.                     service.setVisibility(View.VISIBLE); 
  29.                 } 
  30.             } 
  31.         }); 
  32. /n_login是登錄按鈕   

這樣我們發(fā)現(xiàn)是可以實現(xiàn)效果了,但是我想全屏顯示,懵比了,發(fā)現(xiàn)全屏的時候不回調(diào)這個方法了,怎么辦?又是查資料一看原來這個也是一個bug,但是有解決方案,AndroidBug5497Workaround。也是谷歌提供的?直接拷貝過來,會發(fā)現(xiàn)其實他的作用就是讓Activity最外層的根布局,當(dāng)有布局變化時去響應(yīng)這個變化mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener();

  1. package com.wzh.study.login; 
  2.  
  3.  
  4. import android.app.Activity; 
  5.  
  6. import android.graphics.Rect; 
  7.  
  8. import android.view.View
  9.  
  10. import android.view.ViewTreeObserver; 
  11.  
  12. import android.widget.FrameLayout; 
  13.  
  14.  
  15. public class AndroidBug5497Workaround { 
  16.  
  17.  
  18.     // For more information, see https://code.google.com/p/android/issues/detail?id=5497 
  19.  
  20.     // To use this class, simply invoke assistActivity() on an Activity that already has its content view set
  21.  
  22.  
  23.     public static void assistActivity (Activity activity) { 
  24.  
  25.         new AndroidBug5497Workaround(activity); 
  26.  
  27.     } 
  28.  
  29.  
  30.     private View mChildOfContent; 
  31.  
  32.     private int usableHeightPrevious; 
  33.  
  34.     private FrameLayout.LayoutParams frameLayoutParams; 
  35.  
  36.  
  37.     private AndroidBug5497Workaround(Activity activity) { 
  38.  
  39.         FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content); 
  40.  
  41.         mChildOfContent = content.getChildAt(0); 
  42.  
  43.         mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
  44.  
  45.             public void onGlobalLayout() { 
  46.  
  47.                 possiblyResizeChildOfContent(); 
  48.  
  49.             } 
  50.  
  51.         }); 
  52.  
  53.         frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams(); 
  54.  
  55.     } 
  56.  
  57.  
  58.     private void possiblyResizeChildOfContent() { 
  59.  
  60.         int usableHeightNow = computeUsableHeight(); 
  61.  
  62.         if (usableHeightNow != usableHeightPrevious) { 
  63.  
  64.             int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight(); 
  65.  
  66.             int heightDifference = usableHeightSansKeyboard - usableHeightNow; 
  67.  
  68.             if (heightDifference > (usableHeightSansKeyboard/4)) { 
  69.  
  70.                 // keyboard probably just became visible 
  71.  
  72.                 frameLayoutParams.height = usableHeightSansKeyboard - heightDifference; 
  73.  
  74.             } else { 
  75.  
  76.                 // keyboard probably just became hidden 
  77.  
  78.                 frameLayoutParams.height = usableHeightSansKeyboard; 
  79.  
  80.             } 
  81.  
  82.             mChildOfContent.requestLayout(); 
  83.  
  84.             usableHeightPrevious = usableHeightNow; 
  85.  
  86.         } 
  87.  
  88.     } 
  89.  
  90.  
  91.     private int computeUsableHeight() { 
  92.  
  93.         Rect r = new Rect(); 
  94.  
  95.         mChildOfContent.getWindowVisibleDisplayFrame(r); 
  96.  
  97.         return (r.bottom - r.top); 
  98.  
  99.     } 
  100.  
  101.  
  102.  

使用方式,如果我們設(shè)置了全屏,就去加載它,不設(shè)置不管:

  1. if(isFullScreen(this)){ 
  2.  
  3.             AndroidBug5497Workaround.assistActivity(this); 
  4.  
  5.  
  6. ... 
  7.  
  8. public boolean isFullScreen(Activity activity) { 
  9.  
  10.     return (activity.getWindow().getAttributes().flags & 
  11.  
  12.             WindowManager.LayoutParams.FLAG_FULLSCREEN)==WindowManager.LayoutParams.FLAG_FULLSCREEN; 
  13.  
  14.  

接下來就看具體動畫事件了,鍵盤彈起來的時候整體向上平移,LOGO縮小,鍵盤收起的時候整體下移,并且LOGO恢復(fù)原來大小。這里用到的都是屬性動畫,只有屬性動畫我們才可以實現(xiàn)真正平移效果。

我看網(wǎng)上很多人使用addOnLayoutChangeListener()去監(jiān)聽鍵盤事件,但是這個方法回調(diào)的太頻繁,比如本例特效,輸入框后面有文字時候顯示清除的圖標(biāo),如果用這個方法那么也會執(zhí)行一次,可能會影響你的動畫,當(dāng)然你也可以去記錄***次的高度讓他不會走邏輯,但是我覺得也不是很靠譜,雖然我這個方法也不是很棒 ๑乛◡乛๑~。

***貼上源碼: 

 

 

 

如果有什么問題歡迎指出,我將給出例子地址,包含另一種實現(xiàn)方式就是用scrollview滑動到***部的方式來實現(xiàn)平移效果~ 

責(zé)任編輯:龐桂玉 來源: 安卓巴士Android開發(fā)者門戶
相關(guān)推薦

2011-04-01 16:15:11

Zabbix報錯

2018-04-04 08:47:42

移動應(yīng)用AWS云質(zhì)量保證

2012-12-25 13:16:56

AndroidQQ2012UI

2015-08-03 10:40:45

動效設(shè)計優(yōu)勢

2013-04-22 13:32:55

2012-10-15 10:07:45

jQueryJSWeb

2015-08-12 10:06:12

UI動效

2011-02-13 13:32:33

Windows 8

2010-08-18 08:21:49

Adobe AIRAndroid

2015-07-31 11:40:36

動效Swift

2021-04-15 07:50:45

Veu 動效Vue應(yīng)用程序

2018-02-28 15:39:52

2022-04-28 12:17:26

瀏覽器連字符hyphens

2013-07-22 09:24:33

微信系統(tǒng)推送

2020-02-15 17:15:36

Android 11安卓功能

2014-09-28 10:39:24

AppleWatchUI

2020-08-06 15:50:26

微信無法登陸移動應(yīng)用

2019-07-24 09:00:19

谷歌Android開發(fā)者

2017-05-10 07:33:41

AndroidWebView視頻

2011-06-15 10:00:48

騰訊頁游《七雄爭霸》將
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日本精品免费在线观看 | 91资源在线| 91麻豆精品国产91久久久资源速度 | 亚洲综合首页 | 国产精品一二三区在线观看 | 国产精品福利网站 | 久久久久99 | 97精品国产97久久久久久免费 | 黄色av免费 | 精品国产黄色片 | 日韩一区在线观看视频 | 久久综合久久久 | 91精品一区二区三区久久久久久 | 精品久久国产老人久久综合 | 九色国产| 国产高清精品在线 | 美女国内精品自产拍在线播放 | 午夜免费精品视频 | 蜜桃视频在线观看www社区 | 久久久久国产 | 精品一区二区久久久久久久网站 | 欧美成人一区二区三区 | 人人鲁人人莫人人爱精品 | 在线观看亚洲一区二区 | 91久久精品| 欧美福利影院 | 男女又爽又黄视频 | 欧美精品99 | 久久九九网站 | 欧美一级艳情片免费观看 | 天天干天天干 | 青青草综合 | 亚洲香蕉 | 亚洲精品一区二区在线 | 国产成人在线一区二区 | 在线成人精品视频 | 成人一区二区三区视频 | 99久久婷婷国产综合精品 | 狠狠亚洲 | 日本免费一区二区三区四区 | 成人在线免费观看视频 |