說到齊劉海適配,最典型的就是mainactivity的幾個fragment中有的需要透明系統狀態列 有的不需要, 而一般需要透明系統狀態列的fragment頂部都會放個輪播圖,然後在輪播圖上放搜尋框,所謂適配,就是指搜尋框的位置根據系統狀態列高度設定,達到在齊劉海手機上搜尋框不被覆蓋;
如上圖所示,下面對如動態圖所示系統狀態列進行三步分析
兩行**就能獲取當前系統狀態列的高度
根據ui的需求,我的做法是先設定系統狀態列透明,監聽手勢動作,開始滑動時,增加乙個系統狀態列同高的view,更改背景色漸變(漸變值為0-100%,百分比同 滑動距離/輪播圖高度),更改系統狀態列圖示顏色為深色,再重寫scrollview,監聽滑動置頂時,設定透明系統狀態列,隱藏佔位view;int resourceid = mcontext.
getresources()
.getidentifier
("status_bar_height"
,"dimen"
,"android");
int viewheight = mcontext.
getresources()
.getdimensionpixelsize
(resourceid)
;
/**
* 設定透明系統狀態列
*/view decorview =
getactivity()
.getwindow()
.getdecorview()
;decorview.
setsystemuivisibility
(view.
system_ui_flag_layout_fullscreen
| view.
system_ui_flag_layout_stable);
getactivity()
.getwindow()
.setstatusbarcolor
(color.
parsecolor
("#00000000"))
;//設定透明
/**
* 設定系統狀態列圖示顏色,用false和true 設定顏色為白色或者深色
*/ statusbarcompat.
setlightstatusbar
(getactivity()
.getwindow()
,false
);
/**
* 滑動監聽
*/private myscrollview.onmyscrolllistener listener;
listener =
newmyscrollview.onmyscrolllistener()
else
if(state ==1)
else
if(state ==2)
else
log.d(
"brycegao"
,"滑動狀態:"
+ str);}
@override
public
void
onscroll
(myscrollview view, int y)
statusbarcompat.
setlightstatusbar
(getactivity()
.getwindow()
,true);
//設定導航欄字型顏色}}
} @override
public
void
onscrolltotop()
@override
public
void
onscrolltobottom()
};
其實這個ui適配也很簡單的,就是設定搜尋框的paddingtop為系統狀態列的高度+xdp,這裡就不寫**了/**
*/public
class
myscrollview
extends
scrollview
public
myscrollview
(context context)
public
myscrollview
(context context, attributeset attrs)
public
myscrollview
(context context, attributeset attrs, int defstyleattr)
@override public boolean ontouchevent
(motionevent ev)}if
((ev.
getactionmasked()
== motionevent.
action_up
|| ev.
getactionmasked()
== motionevent.
action_cancel
)&& currentstate == onmyscrolllistener.
scroll_state_touch_scroll)}
boolean curdragstate =
getdragstate()
;//拖動if(
!lastdragstate && curdragstate)
}return ret;
} @override protected
void
ondraw
(canvas canvas)}if
(getscrolly()
==0&& lastdrawpos ==
0&& currentstate != onmyscrolllistener.
scroll_state_idle)}
lastdrawpos =
getscrolly()
;if(iscurrentbottom()
&&!islastbottom)
} islastbottom =
iscurrentbottom()
;}@override public
void
fling
(int velocityy)}}
//判斷是否滑到底部
private boolean iscurrentbottom()
elseif(
getmeasuredheight()
- heightpadding +
getscrolly()
== child.
getmeasuredheight()
)return ret;
}//反射查詢misbeingdragged
private boolean getdragstate()
catch
(exception ex)
return state;
}//滑動加速器是否停止
private boolean isfinishscroll()
catch
(nosuchfieldexception e)
catch
(illegalacces***ception e)
catch
(nosuchmethodexception e)
catch
(invocationtargetexception e)
return isfinish;
}/**
* 新增滑動監聽
* @param listener
*/public
void
addonscrolllistner
(onmyscrolllistener listener)if(
!listeners.
contains
(listener))}
public
void
removeonscrolllistener
(onmyscrolllistener listener)
listeners.
remove
(listener);}
}
三步實現Android懸浮效果
之前做專案的時候實現的乙個懸浮效果,如圖 可能不夠清晰 meibei.gif 接下來就是實現效果,如圖所示 sticky.gif 原理很簡單,用recyclerview addheaderview的方式實現,實現步驟 1.新增依賴 compile com.github.cymchad baserec...
IOS開發 簡單三步配置cocoapods
確定已經安裝好ruby 開啟 終端 mac自帶軟體 第一步 在終端中輸入 cd 檔案路徑 可以直接將工程資料夾拖進去 回車 第二步 在終端中輸入 pod init 開啟自己工程資料夾,會發現多了乙個podfile檔案 只需要修改podfile檔案 target 工程名字 do pod 第三方名稱 版...
WampServer新手安裝簡單三步走
個人部落格 www.sysadm.cc wampserver作為一款在windows下編寫除錯php 的神器之一,一度受到新手小白們的熱捧。無奈對於新手小白們來說,其安裝略顯複雜,易於爆出的各類問題層出不窮 令人生畏。瞧瞧這簡介 wampserver是一款由法國人開發的apache web伺服器 p...