-
自定義控件的步驟查看全部
-
自定義控件的步驟 1.自定義屬性的聲明與獲取 2.測量OnMeasure 3.布局onLayout(ViewGroup) 4.繪制onDraw 5.onTouchEvent 6.onTnterceptTouchEvent(ViewGroup)查看全部
-
自定義view查看全部
-
多指觸控,ViewGroup保存狀態(tài)查看全部
-
接下來我們看布局,如果你是自定義view,是但個view并沒有viewgroup的話就沒有onLayout這個過程的,onlayout是父控件決定自控件顯示位置的; 如果你是viewgroup就需要考慮子view顯示的樣子到底要新顯,示到哪? onMeasure可能在一次過程中,可能是測量布局和繪制可能會調(diào)用很多次才能最終決定這個值,如果有一些耗時或初始化的操作,能移到onLayout當中就盡可能移到,因為onlayout在這個過程中只會觸發(fā)一次;比onMeasure較為輕量級 onlayout一般過程 getChildCount拿到每一個View 如果這個VIew不是Gone的狀態(tài) 計算左上角在哪 右上角在哪 之后調(diào)用child。layout,同理也需要requestLayout()去觸發(fā),完成布局以后就是onDraw(); 自定義View需要繪制自身的樣子,onDraw只要是繪制內(nèi)容區(qū)域的,主要是使用Canvas的 一些API去繪制,當然要熟練的使用Canvas。drawXXX()方法draw line drawssekou,drawair,巧妙使用一些變換的方法,translate,rotate,scale,skew,如果使用這些變換的話千萬不要忘記save(),restore(); 如果我們某些屬性測量值變換我們怎么去重繪呢;去掉用invalidate,postInvalidate();pos·實在子線程中去調(diào)用,在ui線程你可以直接調(diào)用invalidate()這樣的話draw就結(jié)束了 如果在定義一控件沒有和用戶交互這一過程查看全部
-
測量由兩個值決定一個是測量的模式EXACTLY設(shè)置一個明確的值100dp match_parentresult直接等于我們這個值了,AT_MOST 只多不能超過某個值 一般出現(xiàn)我們設(shè)置的wrap_content值中,最大的尺寸不能超過父空間的高度寬度,UNSPECIFIED 沒有限制,一般在listview scrollview中 不可能限制scrollview的子View高度,一個是測量的值, 模式和值一般封裝在MeasureSpec這個輔助類中 是父控件 傳下來的,傳下來以后通過 MeasureSpec。getMode,getsize獲取我們所存儲的mode和size,之后判斷這個mode是否是精確的值,是就直接使用,如果不是,說明我們的尺寸都是自身view決定的 需要自己計算,完以后不要忘了,at——most至多限制,讓他不要超過父控件的值; 當我們測量完之后要調(diào)用setMeasuredDimension,將最終得到的reult穿進去 如何去觸發(fā)測量呢,比如說我重新定義了個textView的控件,當文本發(fā)生改變,測量應(yīng)該出發(fā),可以對外提供一個方法,setText();在setText當中調(diào)用requestLayout();當執(zhí)行requestLayout方法的時候就會重新的測量以及去布局;但是要記住它不包括我們的一個繪制,繪制石油invilder去觸發(fā)的查看全部
-
繪制完如果有和用戶交互的部分我們還需要onTouchEvent,如果我們定義的是viewgroup想去攔截子view的一些事件還需要重寫inInterceptTouchEvent查看全部
-
自定義控件步驟查看全部
-
布局onLayout(ViewGroup)查看全部
-
自定義目的:1特定的顯示風格,2處理特有的用戶交互,3優(yōu)化我們的布局,4封裝復用等查看全部
-
自定義控件流程查看全部
-
...查看全部
-
The fact查看全部
-
自定義控件要素查看全部
-
222查看全部
舉報
0/150
提交
取消