1.理解View的坐標(biāo)體系
Android中有兩種坐標(biāo)系市袖,分別為Android坐標(biāo)系和視圖坐標(biāo)系咙鞍。 在Android中苞冯,將屏幕的左上角的頂點(diǎn)作為Android坐標(biāo)系的原點(diǎn),這個(gè)原點(diǎn)向右是X軸正方向肯尺,原點(diǎn)向下是Y軸正方向沃缘。
MotionEvent提供的getRawX()和getRawY()獲取的坐標(biāo)都是Android坐標(biāo)系的坐標(biāo)。
2.了解View 滑動(dòng)的實(shí)現(xiàn)機(jī)理
實(shí)現(xiàn)滑動(dòng)效果要監(jiān)聽用戶的觸摸事件则吟,并根據(jù)事件傳入的坐標(biāo)槐臀,動(dòng)態(tài)且不斷的改變 View 的坐標(biāo),從而實(shí)現(xiàn) View 跟隨用戶觸摸的滑動(dòng)而滑動(dòng)氓仲。
- 通過 layout() 方法
- offsetLeftAndRight() 方法和 offsetTopAndBottom()
- 通過修改 LayoutParams 實(shí)現(xiàn)滑動(dòng)
- 使用動(dòng)畫
- View 的 scrollTo()水慨、scrollBy() 方法實(shí)現(xiàn)滑動(dòng)
- 通過 Scroller 類實(shí)現(xiàn)滑動(dòng)
- ViewDragHelper 實(shí)現(xiàn)滑動(dòng)
3.了解View 動(dòng)畫的種類及實(shí)現(xiàn)
補(bǔ)間動(dòng)畫
在res/anim文件夾中定義
幀動(dòng)畫
在res/drawable文件下新建xml
屬性動(dòng)畫
- 自定義估值器Evaluator
- 設(shè)置動(dòng)畫過度ValueAnimator
- 動(dòng)畫集合Animatorset
4.掌握屬性動(dòng)畫涉及的相關(guān)類得糜,以及開發(fā)流程
ValueAnimator,ObjectAnimator(繼承自ValueAnimator)晰洒,Animatorset(動(dòng)畫集合)
開發(fā)流程
- 自定義估值器Evaluator
- 設(shè)置動(dòng)畫過度ValueAnimator
- 動(dòng)畫集合Animatorset
5.了解 View 的事件分發(fā)機(jī)制
事件分發(fā)的三個(gè)方法
- dispatchTouchEvent:用于分發(fā)傳遞事件朝抖,只要事件能夠傳遞到當(dāng)前View,這個(gè)方法就會(huì)被調(diào)用欢顷。
- onInterceptTouchEvent:用于判斷是否攔截事件槽棍,不往下傳遞捉蚤。(此方法只有ViewGroup擁有抬驴,Activity和View沒有)此方法在dispatchTouchEvent方法中調(diào)用。
- onTouchEvent:用于處理事件缆巧,同樣也是在dispatchTouchEvent方法中調(diào)用布持。
6.理解 View 的工作流程,以及measure過程陕悬、layout過程和draw過程的實(shí)現(xiàn)機(jī)理
View 的工作流程
流程主要是指 measure题暖、layout、draw 這三大流程
measure 測(cè)量
- 面中全部視圖運(yùn)行requestLayout
- 運(yùn)行scheduleTraversals捉超,當(dāng)中發(fā)送一個(gè)空的消息
- 傳遞的消息是DO_TRAVERSAL胧卤,分支調(diào)用performTraversals
- performTraversals方法中調(diào)用host.measure
layout 布局
- setFrame方法設(shè)定View四個(gè)頂點(diǎn)的位置
- 調(diào)用onLayout方法
- setChildFrame方法調(diào)用子元素的layout方法設(shè)定子元素位置
draw 繪制
- 繪制背景background.draw(canvas)
- 繪制自己(onDraw)
- 繪制children(diapatchDraw):遍歷所有子元素的draw方法
- 繪制裝飾(onDraeScrollBars)
7.理解自定義 View的4種類型,掌握最簡(jiǎn)單的自定義View的實(shí)現(xiàn)拼岳。
組合控件枝誊、自繪控件、繼承控件
例子:
- 新建一個(gè)Android項(xiàng)目惜纸,創(chuàng)建自定義標(biāo)題欄的布局文件title_bar.xml
- 創(chuàng)建一個(gè)類TitleView叶撒,繼承自RelativeLayout
- 在activity_main.xml中引入自定義的標(biāo)題欄
- 在MainActivity中獲取自定義的標(biāo)題欄,并且為返回按鈕添加自定義點(diǎn)擊事件