仿360手機衛士首頁[android平臺]

學習android一個月了,對android的UI開發部分一直不是很熟悉。于是最近拿360手機衛士首頁來練手,做了個小demo,想與各位多多交流。效果圖如下:
(1)首頁


(2)transformation動畫效果

(3)ViewFlipper滑動屏效果

(4)工具欄側滑效

將開發經驗總結為兩個方面
一、編寫界面
  由于是自己第一次做android應用開發,因此對如何編寫Android界面并不熟悉。 在開發中總結的經驗如下:
1、新手盡量手動邊寫布局的xml文件。之前的小練習都是直接在Graphical Layout中直接拖控件,并沒有自己編寫xml文件。而只有手動邊寫布局xml文件,才能更加深入體會界面的設計以及各個各個空間屬性的影響,更加準確的控制各個控件的位置
2、考慮到屏幕適配的問題。在動手之前看一些屏幕適配的注意事項,將其應用到了開發過程中
3、使用Hierarchy View來觀察其他軟件的布局。多觀察其他成熟軟件的布局設計,對自己開發很有幫助。
4、通過反編譯獲取bitmap等資源。demo中的所有bitmap,均是使用的360手機衛士的bitmap資源,節省了很多時間。并且這些bitmap的命令都有規律,也比較好查找。
5、多多練習各種布局的使用。在該demo中,使用的最多的布局是LinearLayout。 對于大多數界面,LinearLayout都能搞定。 對于比較復雜的界面。 各種布局嵌套是很必要的技巧。例如每個磁貼的布局,都是LinearLayout嵌套FrameLayout,再嵌套LinearLayout
一點小技巧:
(1)將“height"在xml文件中,設置為0, 再在程序運行的動態中設定其高度。可以實現動態增加layout。
(2)為實現側滑效果,可以在屏幕外建立layout。這樣程序啟動時是不可見的,在程序運行過程中通過改變margin將其顯示出來。
(3)將"layout_height"或者"layout_width"設置為0,再通過設置layout_weight,可以實現height或width按比例顯示。
(4)android:src是設置圖標,不會拉伸圖片。而background是設置背景,會拉伸圖片來適應空間。兩者可同時使用。
(5)android:visible可以用來實現一些特殊效果。
二、實現動畫
1、transformation動畫效果,如圖2所示。 其實是兩個一樣大的磁貼(LinearLayout),通過設置他們的topmargin與bottommargin實現的滑動效果。關鍵的步驟是,新建一個AsyncTask,在doInBackground中,每隔一段時間,計算一個滑動距離。

while(true){
    distance = speed_Scroll +distance;
    if(distance>height_View){
        distance = height_View;
        break;
}
publishProgress(distance);
try {
    Thread.sleep(100);
} catch (InterruptedException e) {
    e.printStackTrace();
}

在onProgressUpdate中改變兩個LinearLayout(命名為curtainLayout與layout)的topmargin與bottommargin。

curtainLayoutParams.topMargin = progress[0]-height_View;
curtainLayout.setLayoutParams(curtainLayoutParams);
layoutParams.topMargin = progress[0];
layoutParams.bottomMargin = -progress[0];
tileGUILayout.setLayoutParams(layoutParams);
  • 2 ViewFlipper滑動屏效果 。這個效果容易實現,使用android中的FlipperView類,建立一個GestureDetecor.onGestureListener來監聽手勢,重載OnFling事件,設置setInAnimation與setoutAnimation的動畫
viewFlipper.setInAnimation(context, R.anim.push_left_in);
viewFlipper.getChildAt(0).setVisibility(View.VISIBLE);
viewFlipper.setOutAnimation(context, R.anim.push_left_out);
viewFlipper.setDisplayedChild(1);
lastPosition = 1;

布局文件xml如下所示

<ViewFlipper android:id="@+id/flipperView"
android:layout_width="match_parent"
android:layout_height="match_parent">    
<include android:id = "@+id/flipperView1" layout="@layout/gridview1_main"/>
<include android:id = "@+id/flipperView2" layout="@layout/gridview2_main"/> </ViewFlipper>
  • 3 工具欄側滑效果,這個同1。特別說明的是,首頁中的磁貼部分,是一個gridview。每一個磁貼,例如”騷擾攔截“,”手機清理“等,都是通過繼承BaseAdapter,在其getItem函數中使用LayoutInflater.inflate動態加載的。
      UI開發部分,還是得多加練習,特別是各種動畫,值得我們深入研究下去。不對的地方,還請各位多多指正
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容