自定義控制元件心得
對於自定義控制元件,要知道怎麼獲得當前控制元件的寬高,相對於父控制元件的擺放位置
要知道怎麼獲得子控制元件,如何擺放子控制元件,如何測量子控制元件
view.getLayoutParams().width是獲得控制元件在佈局檔案中設定的尺寸,可以是常量FILL_PARENT之一(由API級別8中的MATCH_PAREN獲得當前控制元件的寬高T替換)或WRAP_CONTENT。或確切的大小。
獲得當前控制元件的寬高
getMeasuredHeight()
getMeasuredWidth()
相對於父控制元件的擺放位置
getLeft ()getRight ()。。。。
一.View移動的相關方法總結:
1.通過改變view在父View的layout位置來移動,但是隻能移動指定的View:
view.layout(l,t,r,b);
view.offsetLeftAndRight(offset);//同時改變left和right
view.offsetTopAndBottom(offset);//同時改變top和bottom
2.通過改變scrollX和scrollY來移動,但是可以移動所有的子View;
scrollTo(x,y);
scrollBy(xOffset,yOffset);
3.通過改變Canvas繪製的位置來移動View的內容:
canvas.drawBitmap(bitmap, left, top, paint)
二.使用ViewDragHelper來處理移動
1.ViewDragHelper在高版本的v4包(android4.4以上的v4)中
2.它主要用於處理ViewGroup中對子View的拖拽處理
3.它是Google在2013年開發者大會提出的
4.它主要封裝了對View的觸控位置,觸控速度,移動距離等的檢測和Scroller,通過介面回撥的
方式告訴我們;只需要我們指定是否需要移動,移動多少等;
5.本質是對觸控事件的解析類;
三.getHeight和getMeasuredHeight的區別:
getMeasuredHeight:只要view執行完onMeasure方法就能夠獲取到值;
getHeight:只有view執行完layout才能獲取到值;
四.在自定義ViewGroup的時候,如果對子View的測量沒有特殊的需求,那麼可以繼承系統已有的
佈局(比如FrameLayout),目的是為了讓已有的佈局幫我們實行onMeasure;
/** * 側滑面板控制元件, 抽屜面板. * @author poplar * * 測量 擺放 繪製 measure -> layout -> draw | | | onMeasure -> onLayout -> onDraw 重寫這些方法, 實現自定義控制元件 View流程 onMeasure() (在這個方法裡指定自己的寬高) -> onDraw() (繪製自己的內容) ViewGroup流程 onMeasure() (指定自己的寬高, 所有子View的寬高)-> onLayout() (擺放所有子View) -> onDraw() (繪製內容) * */