安卓面試之=》自定義View
阿新 • • 發佈:2019-02-13
純屬個人筆記,學習筆記!!!!!
1:自定義屬性的宣告和獲取 分析要需要的屬性 在res/values/attrs.xml中進行定義宣告,在使用自定義控制元件xml中使用 在自定義控制元件構造方法中獲取 主要用context.obtainStyleAttributes 去獲取,獲取完記得要 a.recycle()釋放資源 2:測量onMeasure ==> (可能會觸發多次) 1:EXACTLY(設定明確的值) AT_MOST(至多不能超過某個值) UNSPECIFIED(沒有限制) 測量模式 2:MeasureSpec ==》輔助類,獲取測量模式+和大小 3:setMeasuredDimension==》測量完後記得要調這個方法把高度設定進去 4:requstLayout() private int measureHeight(int heightMeasureSpec){ int result = 0; int mode = MeasureSpec.getMode(heightMeasureSpec); int size = MeasureSpec.getSize(heightMeasureSpec); if (mode==MeasureSpec.EXACTLY){ result = size; }else { result = getNeedHeight()+ getPaddingTop()+getPaddingBottom();//計算自身高度 if (mode == MeasureSpec.AT_MOST){ result = Math.min(result,size); } } return result; } 3:佈局onLayout(一般是隻有繼承ViewGroup才用) 只會觸發一次5:onTouchEvent 1:onInterceptTouchEven(事件攔截) 2:dispatchTouchEvent(事件分發機制) 如果是繼承ViewGroup==可能需要重寫該方法攔截事件或者事件分發 getParent().requestDisallowInterceptTouchEvent(true);可以通過這個方法來設定觸控時間是否需要被攔截還是要自己消費
ACTION(_DOWN UP MOVE (POINT_DOWN POINT_UP 多點觸控)) 如果要考慮滑動的速度檢測 要初始化VelocityTracker 在時間中要 vt.addMovement(ev) 在ACTION_UP中去進行速度判斷,然後做相應操作 考慮多點觸控的時候可以參考ScrollView進行處理: ==》要考慮哪一個觸點,是那個真正操作當前view ==》當某個觸點擡起了,就要改變當前活躍觸點, 比如當前有三個手指,第二個手指按下,第一個手指產生的觸點就失去了控制權,第二個手指放開了第一個手指又獲得控制權 7:其他 狀態的儲存 onSaveInstanceState onRestoreInstanceState ==>比如progressBar的進度 ViewConfiguration 去獲取相關常量 ScaleGestureDetector 寫一個縮放手勢 ViewDragHelper強大ViewGroup輔助類