看書的總結(jié)參考資料(Android群英傳)
1.自定義控件
1.1控件架構(gòu)
Activity-PhoneWindow-DecorView(TitleView,ContentView)
1.2View的測量
1)OnMeasure()方法
2)MeasureSpec類是一個(gè)32位int值,高2位是測量模式,低30是測量大小
3)測量模式有EXACTLY(精確模式)、AT_MOST(最大值模式)、UNSPECIFIED(未定義大小,一般用于自定義View)
獲取模式例如:int specMode = MeasureSpec.getMode(measureSpec);
判斷模式例如:specMode == MeasureSpec. EXACTLY
1.3View 的繪制
1)OnDraw()
2)onFinishInflate():從XML加載完組件后調(diào)用
3)onSizeChanged():組件大小改變時(shí)調(diào)用
4)如果是ViewGroup還有布局方法onLayout()
1.4自定義屬性
1)創(chuàng)建attr.xml文件
2)代碼獲取上面布局文件,并給控件設(shè)置屬性
例如:TypedArray ta=context.obtainStyleAttributes(attrs,R.styleable.name);
mBg = ta.getDrawable(R.styleable.name_propertyName,0);
mButton.setBackground(mBg);
3)自定義接口
4)引用文件
注意指定名字空間
xmln:android=http://schemas.android.com/apk/res/android
1.5事件攔截機(jī)制
例如A-B-C
完整流程是:A的dispatchTouchEvent—A 的onInterceptTouchEvent
B的dispatchTouchEvent—B 的onInterceptTouchEvent
C的dispatchTouchEvent—C 的onTouchEvent
B的onTouchEvent-C的onTouchEvent
只要onTouchEvent沒有返回true就會(huì)執(zhí)行下一個(gè)的onTouchEvent直到結(jié)束
2.ListView的使用技巧
2.1常規(guī)技巧
ViewHolder/ convertView
android:divider=”@android:color/darker_gray” 設(shè)置分割線
android:scrollbars=”none” 隱藏滾動(dòng)條
listView.setSelection(N) 指定顯示第N條item
mAdapter.notifyDataSetChanged(); 動(dòng)態(tài)更新
listView.setEmptyView(empty_view); 注意empty布局和listview在一起。
2.2ListView的監(jiān)聽事件
1)OnTouchListener(down/move/up事件);
2)onScrollListener其中onScrollStateChanged(SCROLL_STATE_IDLE
停止/SCROLL_STATE_ITOUCH_SCROLL滑動(dòng)/SCROLL_STATE_IFLING用手指滑動(dòng)離開時(shí)的慣性滑動(dòng)狀態(tài));onScroll()滾動(dòng)時(shí)一直調(diào)用
2.3LisView的特殊方法
1)overScrollBy:重寫它可以設(shè)置listview下拉距離
2)getItemViewType():判斷加載不同布局樣式的表標(biāo)識(shí)
3.Scroll分析
3.1獲取坐標(biāo)的方法
3.2實(shí)現(xiàn)滑動(dòng)的方法
1)onLayout(通過原坐標(biāo)+偏移量)
2)offsetLeftAndRight(offsetX)和offsetTopAndBottom(offsetY)根據(jù)偏移量調(diào)用該方法
3)LayoutParams(動(dòng)態(tài)修改布局位置)
4)ScrollTo(x,y)表示移動(dòng)到摸個(gè)具體的坐標(biāo);ScrollBy(offset,offsetY)表示移動(dòng)的增量也就是偏移量.注意以上兩個(gè)方法移動(dòng)是數(shù)瞬間完成的
5)Scroller可以平滑的移動(dòng)
6)屬性動(dòng)畫
7)ViewDragHelper
4.繪圖技巧
4.1屏幕的一些概念
1)分辨率、DPI(每英寸像素)、px和dp的轉(zhuǎn)換、px和sp的轉(zhuǎn)換
2)canvas畫線、形狀等
3)XML繪圖bitmap標(biāo)簽、shape標(biāo)簽、Layer標(biāo)簽(類似于PS圖層)、Selector(不同事件獲得不同狀態(tài))
4)surfaceView(使用場景頻繁刷新或者刷新時(shí)數(shù)據(jù)處理較大可以考慮使用)
5.動(dòng)畫
5.1tween(補(bǔ)間動(dòng)畫)
Alpha(透明)、Rotate(旋轉(zhuǎn))、Translate(位移)、Scale(縮放)、AnimationSet(動(dòng)畫集合)
5.2frame(幀動(dòng)畫)
5.3Object(屬性動(dòng)畫)
通過靜態(tài)工廠的方式返回一個(gè)objectAnimator對(duì)象;PropertyValuesHolder(實(shí)現(xiàn)動(dòng)畫集合);
AnimatorSet(實(shí)現(xiàn)動(dòng)畫集合);
5.4自定義動(dòng)畫
(applyTransformation(float interpolatedTime,Transformation t))
5.5 Android5.X SVG矢量動(dòng)畫
6.Activity
6.1狀態(tài)
Running Paused Stopped Killed
6.2生命周期(七種)
OnCreate onStart (可見)onResume(獲得焦點(diǎn)) onPause(失去焦點(diǎn)) onStop(不可見) onDestory onRestart
6.3啟動(dòng)模式
standard singleTop singleTask singleInstance
7.性能優(yōu)化
7.1布局優(yōu)化
include、 ViewStub
7.2內(nèi)存優(yōu)化
靜態(tài)存儲(chǔ):編譯的時(shí)候就存在的,一般是static
棧:一般存放基本數(shù)據(jù)類型和對(duì)象的引用,對(duì)象本身存儲(chǔ)在堆中
堆:用來存放用new創(chuàng)建的對(duì)象和數(shù)組
7.3使用工具分析、優(yōu)化
1)Bitmap的優(yōu)化:使用適當(dāng)?shù)姆直媛蕡D片,及時(shí)回收,使用緩存
2)代碼優(yōu)化:使用靜態(tài)方法、static修飾常量、減少不必要的成員變量、對(duì)資源注意回收解注冊(cè)等、避免使用IOC框架、盡量使用視圖緩存、使用surfaceView替換View進(jìn)行頻繁的繪圖。