編輯:關於Android編程
當今,Android、IOS二分天下,什麼Tizen、COS blabla的均為蝼蟻,一看就知道是為打發領導或為花研發資金產出的產品,根本不是為了贏得市場,為的只是博得領導一笑而已,完全可以忽視。而Android開發又因為開發語言以Java為主,入門門檻極低導致基本上是個程序員,泡兩天EOE,或Android Developer Training都可以過來說“哥會開發Android app了!”,那麼什麼才能將你的App脫穎而出呢?准確的用戶痛點、良好的數據結構、簡單易用的交互流程、大方前衛的設計風格等等等等都是必要的,而對於用戶來說,最直觀、最直接、最能被打動的就是界面,本片博客就來講述一下Android界面開發中不可小觑的動畫開發,初步決定要分為三篇博客進行詳解,分別是xml動畫、代碼動畫、插值器。本篇作為開篇,就來講述一下xml動畫的開發。
android:duration="200" android:interpolator="@android:interpolator/overshoot" android:repeatCount="infinite" android:repeatMode="reverse|restart"
android:interpolator用來定義容器中所有子動畫的插值器,後邊的文章會詳細說明什麼是插值器;
android:repeatCount用來定義容器中所有子動畫的重復次數,infinite為無限;
android:repeateMode用來定義容器中所有子動畫重復時的模式,restart為重頭播放,reverse為回放(很詭異吧)。
PS:上邊這些屬性所有屬性動畫(子動畫)都有,意義相同。
現在看scale縮放動畫,注意對其屬性進行說明(除了android:duration都是scale縮放動畫特有的屬性):
android:pivotX縮放的X軸坐標在哪。此X軸所在坐標系與我們從小到大所學的略有區別:
Y | | -----------------------→ X | ↓
android:pivotY縮放基准點的Y軸坐標,別忘了是向下增長的,當然了如果是中心的話,可以像例子中一樣簡單的定義為50%p。
android:fromXScale縮放開始視圖單位在X軸上的縮放比例為多少,1即為100%,”.5"即為50%,fromYScale同理。
android:toXScale縮放結束後視圖單位在X軸上的縮放比例為多少,Android系統會自動為我們講視圖從from到to做補間動畫(自動連續且自然),toYScale同理。
最後用一句話總結scale縮放動畫的含義:以視圖單位的中心點為准,將其大小從100%所放到85%,持續時間為300毫秒。
PS:Android內置了三個動畫持續時長,分別為@android:integer/config_shortAnimTime(200ms)、@android:integer/config_mediumAnimTime(400ms)、@android:integer/config_longAnimTime(500ms),同時值得注意的是,在Android系統的設置中的開發者選項中,動畫持續時間的調試選項只有在使用這幾個值時才會生效,如果你使用了自定義的時間,這幾個開發者選項將不能對你的應用生效。
說明完scale縮放動畫後,再來看下一個alpha透明度動畫,這個就要簡單多了,簡單的兩個屬性:
android:fromAlpha動畫開始時的視圖透明度;
android:toAlpha動畫結束時的視圖透明度,同樣的”.4"代表40%,一個“."即帶包百分比。
分析完了整個xml動畫文件,總結一下這個動畫文件所描述的動畫行為就是:以視圖中心為基准,進行100% 到85%的縮放,與此同時視圖的透明度由100% 漸變到 40%,整個動畫過程持續200ms。
除了上邊介紹到的scale縮放動畫和alpha透明度動畫,xml動畫還可以定義其他的動畫形式:
rotate旋轉動畫。圍繞點(pivotX, pivotY)進行旋轉,起始角度為fromDegrees,終止角度為toDegrees。
translate位移動畫。X軸上從fromXDelta移動到toXDelta,Y軸上從fromYDelta移動到toYDelta,很容易理解。
XML動畫的定義在Android L之前就是這些(L版本的動畫只有在L平台上有效,作為beta版本目前沒有多少設備覆蓋量),總共包含四種動畫形式:scale縮放,alpha透明度,rotate旋轉,translate位移。等等,是不是缺少了什麼?如果想設計圍繞X或Y軸的旋轉動畫呢?對不起,XML動畫還做不了這個,只能在代碼中定義,看之後的文章吧。
定義完了XML動畫文件後如何進行使用呢?首先,明確一下xml動畫能夠應用到哪些地方:Activity、Fragment及所有View。先講一下View,關於View的動畫需要在代碼中實現,假設我們已經定義了一個XML動畫,名字為fade_zoom_out.xml,獲取這個動畫的對象:
Animation animation = AnimationUtils.loadAnimation(context, R.anim.fade_zoom_out);
讓指定的View播放我們剛剛獲取的動畫需要調用View的startAnimation方法:
public void startAnimation(Animation animation)
public void setAnimationListener(AnimationListener listener)
public static interface AnimationListener { void onAnimationStart(Animation animation); void onAnimationEnd(Animation animation); void onAnimationRepeat(Animation animation); }
Activiyt的動畫應用有兩種方式,分別是代碼中和styles.xml中主題覆蓋。個人推崇通過主題定義來應用Activity動畫,這樣整個應用的統一性更好,有問題也比較容易修改。但是還是要說一下代碼中怎麼將XML動畫應用在Activity上:
public void overridePendingTransition(int enterAnim, int exitAnim)
假設現在有兩個Activity,A和B。從A中執行startActivity(B),然後調用overridePendingTransition(enterAnim, exitAnim)。這時B是新的,A是舊的,需要消失。則enterAnim會應用在B上,exitAnim會應用在A上。
主題定義的方式。自定應用主題時,動畫風格的屬性為android:windowAnimationStyle:
- @style/Animation
自定義時,注意parent的選擇:
Activity相關動畫屬性的設置有四個:
android:activityOpenEnterAnimation指的是由打開動作(open)引出的新的Activity進入的動畫是什麼;
android:activityOpenExitAnimation指的是由打開動作(open)引出新的Activity後,舊的Activity的退出動畫是什麼;
android:activityCloseEnterAnimation指的是由上一個Activity的關閉導致Activity棧中下一個Activity出現時,所出現的這個Activity的動畫效果如何;
android:activityCloseExitAnimation指的是由上一個Activity關閉導致的棧中下一個Activity出現時,這個關閉的Activity退出動畫如何。
果然很繞嘴吧,下邊用一個例子來解釋:
假設有兩個Activity A和B,分別設置了不同的動畫主題。當前窗口顯示的是A,點擊A中的某個按鈕會引出B。
當點擊A中的這個按鈕時,因為B是因為被打開引出的,所以B播放的是B主題的activityOpenEnterAnimation動畫,而A播放的是B主題activityOpenExitAnimation動畫(因為A的退出(實際是在Activity棧中後退了一個)是因為B被Open導致的,並不是因為A自身的open或close操作)。
當從B返回時,B界面需要消失,Activity棧決定A界面該出現在前台。所以可以說A的出現是因為B的close行為導致的。那麼A和B所播放的動畫就是A主題中定義的那些,A因為close行為導致出現,則播放activityCloseEnterAnimation,B是這個close行為中需要退出的界面,則播放activityCloseExitAnimation。
如果還是不理解,就定義幾個差異顯著的動畫來親身測試一下吧,絕對立竿見影的!
Activity的動畫就是這樣,開發過程中還是比較常見的。關於Fragment的相關動畫設置改日再寫,今天晚了,睡覺去~
動畫的使用能夠為應用增光添彩,但是凡事講求度,一旦動畫被濫用,整體的用戶體驗非但不能提升,反而容易讓用戶感覺到十分做作。多講求一些微動畫吧,比如View的微微抖動。而轉場動畫就更應該講求清新淡雅,如果動畫效果過於強烈,用戶一定覺得你的應用運行的很費勁。XML動畫應用比較簡單,一般適合用來做轉場動畫,對於View動畫來說並不夠靈活。
問題描述:用React Native架構的無論是Android APP還是iOS APP,在啟動時都出現白屏現象,時間大概1~3s(根據手機或模擬器的性能不同而不同)。問
這個效果的完成主要分為兩個部分自定義view作為listview的列表項 一個view裡面包括 顯示頭像,名字,消息內容等的contentView和滑動才能顯示出來的刪除
首先我們先看下效果圖實現思路這是兩張前後對比圖,右邊第二張圖裡面的已搶光標簽圖片當已經沒有商品的時候就會顯示了,在每個圖片的中心位置,第一想法是在ImageView的外層
介紹在一些APP中我們可以看到一些存放標簽的容器控件,和我們平時使用的一些布局方式有些不同,它們一般都可以自動適應屏幕的寬度進行布局,根據對自定義控件的一些理解,今天寫一