智慧北京01_splash界面_新手引導界面_slidingMenu框架_.主界面結構

智慧北京重點是練習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的地方刪掉就行.

相關文章
相關標籤/搜索