智慧北京重點是練習ui框架的搭建java
1,閃屏頁(splash)開發:android
觀察可知,這個閃屏界面有api
旋轉動畫數組
縮放動畫app
透明度漸變更畫框架
參考結果eclipse
注意:是沒有標題和狀態欄的開源項目介紹
桌面圖標和名稱的修改工具
清單文件中配置application節點下的icon和label佈局
動畫實現:拿到根佈局作動畫便可
旋轉動畫:0-360,基於自身,保持動畫結束狀態
縮放動畫:從0-1
Alpha動畫:0-1 //比別的動畫多執行1秒,效果更好
//運行的時候,動畫集合
AnimationSet as = new XXXX(插補器(抖動效果,是否共享加速度)true);
2,閃屏頁跳轉頁面
2.0 動畫結束監聽器,結束以後才跳轉頁面
經過sp獲取狀態,是否進入新手引導頁
額外:封裝sp,建立包utils,建立類PreUtils(參考類名)
這個工具類,能夠獲取boolean類型的值,也能夠設置boolean類型的值(內部封裝sp對象)
String,int,double,均可以封裝
2.1新手引導頁(第一次進來),參考樣式
主頁面(不是第一次進入)
3,新手引導頁面的開發與填充,參考ui
這裏的新手引導界面是一個ViewPager
先作最複雜的,最後一個ViewPager上面有一個Button(其實一直存在,不過到最後一個View上面才顯示),另外下面三個小圓點就是一個懸浮在ViewPager上的LinearLayout
Button的ID通用作法是用btn_xxx表示
①PagerAdapter的方法
getCount()//返回ViewPager顯示的總條目
isViewFromObject(view,object) //判斷當前返回的object是否是一個View對象view==object
instantiateItem()//初始化一個item對象
destoryItem()//銷燬一個item對象,container.remove((view)object)//這裏的 super可刪掉
②初始化數據
建立一個新手引導圖片的數組,遍歷它建立ImageView
而後添加到一個集合中mImageViewList
getCount()就能夠返回這個集合的長度
instantiateItem()中獲取到對應索引的ImageView,返回這個ImageView中便可
③三個小灰點
在初始化ImageViewe數組的時候,也初始化小圓點
建立ImageView,建立XML文件(作一個小圓點shape=oval屬性)
指定寬高size(這裏也能夠不指定,經過params屬性指定也能夠)
從第二個小圓點開始設置左邊距
這裏的佈局參數通常用父控件的參數LinearLayout.LayoutParams params =new XXX(包裹內容,-2)
param.leftMargin = xxx;//設置左邊距
④紅色的小圓點,隨着引導界面的移動而移動到下一個點
建立一個XML文件,定義一個小紅點(大小跟小灰點一致)
由於這個小紅點須要壓在小灰點上面(在小灰點的LinearLayout上面包裹一個RelativeLayout)
默認壓在第一個小灰點上面
3.2 頁面指示器小紅點的移動
當用戶手指滑動的時候,但願小紅點跟隨手指的移動進行移動(移動距離與ViewPager有關)
參數混亂,未綁定源碼(eclipse在javaBuildPath中,刪掉Libraries下對應的包(由於在Dependencies中不讓綁定源碼,而後再手動的addJar,Order and Export頁面下勾選上,不勾選也沒事,但有時候會報錯))
mViewPager.setOnPageChangeListener(new onPageChangeListener){
onPageSelected()//當一個頁面被選中的時候調用
onPageScrolled(){//頁面滑動過程當中調用
參數:position 當前位置
positionOffset 移動偏移百分比!(能夠直接拿來作動畫的進度)
更新小紅點的距離:
小紅點移動距離 =( 小紅點的左邊距到下一個小灰點的左邊距差值 )X偏移百分比
計算兩個圓點的距離
經過小圓點的父容器getChildAt(0)(1)獲取left的值,相減獲得小紅點移動的距離
可是直接獲取到的是0,由於這時候頁面可能沒有繪製完
Measure>>layout>>ondraw(這三個方法只有當activity的onCreate()方法執行完了才調用)
解決方法:監聽layout方法結束的事件,位置肯定好了以後再調用獲取圓點間距
小紅點.getViewTreeObserver()//獲取視圖樹觀察者
.addOnGloballLayoutListener()//全局的Layout監聽器,
重寫的方法裏,是layout方法執行結束的回調
在這裏獲取距離就行
這個方法有可能會執行屢次
獲取完後getViewTreeObserver().removeGloXXX(this)//本身移除本身
這個方法已經被移除(api16,由於命名不規範)
Sdk>>Tools>>hierarchyviewer.bat//能夠看到視圖樹
打開以後,選中包名,點擊load Vie Hierarchy能夠看到視圖樹
視圖樹上面的紅綠點表明三個方法(measure,layout,ondraw方法)時候順暢(執行速度)
}
onPageScrolledStateChange()//頁面狀態發生改變時調用
});
拿到距離以後就讓距離*百分比,獲得小紅點須要移動的距離
拿到小紅點的佈局參數(父容器.layoutParams)
params.leftMargin = 移動的距離 + posintion * 間距
3.4 開始體驗按鈕邏輯
在前兩個頁面把按鈕隱藏起來,最後一個頁面再顯示,經過ViewPager的回調進行動態的判斷
按鈕也要有狀態選擇器
按鈕文字也要有狀態選擇器(設置文本顏色的時候,也能夠設置對應的顏色選擇器)
顏色選擇器放到Color文件夾下
點擊體驗按鈕的時候更新sp中的信息
4.主界面結構
參考結果圖包含側邊欄和內容頁
4.1>>>庫項目 Library
①建立項目的時候能夠標記爲庫
庫項目和普通項目的區別
在projcet.properties中多了一行android.library = true;//若是爲false就是普通項目
②用法
在庫項目中的功能能夠在別的項目中使用(添加庫項目到別的項目的引用)
就可使用它了(eclipse中右鍵別的項目的properties>>android>>add library)
與jar包的區別,不只能夠訪問java文件,還能夠訪問資源文件
注意:所引入的庫項目須要和當前項目在同一個盤符下
4.2 SlidingMenu開源項目介紹
①注意事項
導入example實例代碼的時候報錯,是由於缺少一個Library(\ABS開發ActionBar的標題欄,4.0之後才加入,2.X版本沒有,因此第三方的開源框架就能夠向下兼容,這裏刪掉就能夠)
把實例代碼裏關於ActionBar有關的代碼刪掉就是
②使用方式:
引入庫
繼承的時候用SlidingActivity
若是既要側拉框又要Fragement就繼承SlidingFragmentActivity
onCreate()方法改爲public的
設置側邊欄
setBehindContentView((佈局文件)id);
設置右側邊欄
slidingMenu = getSlidingMenu()拿到SlidingMenu對象,
slidingMenu.setSecondaryMenu(佈局文件);
slidingMenu.setMode(SlidingXXX.Left_RIGHT);//設置模式,左右都有側邊欄
設置全局觸摸
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
設置寬度
slidingMenu.setBehindOffset(200);//設置屏幕預留的寬度(並非側邊欄寬度)
4.3項目使用側邊欄
①引入庫
②設置好各類參數
supportV4包衝突問題:引入的庫中有一個supportV4,本身的項目中也有一個v4包,因此衝突了,刪除掉本身項目中的就能夠了.
項目出現紅色感嘆號問題,java build path的問題,把出現X的地方刪掉就行.