




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第六章AndroidUI編程
自定義控件本章目標(biāo)自定義控件相關(guān)的準(zhǔn)備知識Android2DAPIUI工作原理:Viewgroup/View/Window/WindowManager之間關(guān)系View重要屬性和方法重畫外觀通過androidlayout配置文件設(shè)置控件以及屬性添加新事件和監(jiān)聽器組合控件實現(xiàn)3Window/View/Activity關(guān)系一個Activity僅僅只創(chuàng)建一個Window(IPolicy.makeNewWindow),即PhoneWindowwindow可以通過setContentView設(shè)置一個rootView(一般是viewGroup,mDecorView),作為window顯示的第一個即根viewview.add函數(shù)可以讓window顯示內(nèi)容增多,形成“一棵樹”排列結(jié)構(gòu)4View網(wǎng)絡(luò)體系view含有一個mParent和一個mChildren,分別對應(yīng)父級View或子級ViewUI工作原理-事件傳遞路徑-1Activity通過代理對象mSession(IWindowSession接口)與WindowManager服務(wù)進(jìn)行交互WindowManager服務(wù)通過mSession(IWindow接口)將獲得消息或事件通過相應(yīng)的焦點窗口6UI工作原理-事件傳遞路徑-2底層事件傳遞過程(僅了解)View重要方法UI工作原理-控件繪制過程繪畫從布局的根節(jié)點開始,它被要求來測量和繪制布局樹
調(diào)用每個View的draw方法先畫父節(jié)點(也就是在屏幕后面),然后按照樹中出現(xiàn)的順序畫其同層次節(jié)點度量過程度量過程在measure(int,int)里實現(xiàn)且是一個自頂向下的視圖樹遍歷。每個視圖在遞歸時往下推送尺寸規(guī)格。在度量過程的最后,每個視圖都已經(jīng)保存了自己的度量布局過程發(fā)生在layout(int,int,int,int)中并且也是自頂向下。在這個過程中,每個父節(jié)點負(fù)責(zé)定位它的所有子節(jié)點,通過使用在度量過程中計算得到的尺寸10完全自定義控件步驟1、繼承view,重寫onDraw(Canvascanvas)方法,畫出控件形狀2、重寫view.onKeyDown或onTouchEvent方法,以便能夠得到用戶的輸入,做出相應(yīng)動作。3、根據(jù)控件特性,為控件的特殊功能提供關(guān)鍵事件的監(jiān)聽器接口4、讓自定義控件能夠支持androidlayout配置文件進(jìn)行配置(編寫attrs.xml),并能夠讀取配置文件的控件屬性值。11MyToggleButton實現(xiàn)完全自定義控件繼承ViewpublicclassMyToggleButtonextendsView{privateStringtag=getClass().getName();privatePaintmPaint1; //文本畫筆privatePaintmPaint2; //圓形畫筆privatefloatx; //控件坐標(biāo)privatefloaty; //控件坐標(biāo)privatefloatmInnerRadius=3; //選中狀態(tài)時,畫出的內(nèi)圓半徑privatefloatmOuterRadius=5; //外圓半徑privatebooleanmStatus; //控件狀態(tài)privateStringmCaption; //控件標(biāo)題…}構(gòu)造函數(shù)publicMyToggleButton(Contextcontext)publicMyTogglebutton(Contextcontext,AttributeSetattrs) publicMyToggleButton(Contextcontext,AttributeSetattrs){ super(context,attrs); mPaint1=newPaint(); mPaint1.setColor(Color.RED); Typefacefont=Typeface.create("宋體",Typeface.NORMAL); mPaint1.setTypeface(font); mPaint1.setTextSize(35); x=50; y=50; mPaint2=newPaint(); mPaint2.setColor(Color.WHITE); }控件繪制方法重寫onDraw方法 protectedvoidonDraw(Canvascanvas){ Log.i("MyToggleButton","onDraw"); mOuterRadius=(mPaint1.getFontMetrics().descent- mPaint1.getFontMetrics().ascent)/2; mInnerRadius=5; mPaint2.setStyle(Paint.Style.STROKE); canvas.drawCircle(x,y,mOuterRadius,mPaint2); if(mStatus){ mPaint2.setStyle(Paint.Style.FILL_AND_STROKE); canvas.drawCircle(x,y,mInnerRadius,mPaint2); } canvas.drawText(mCaption, x+mOuterRadius+10,y+mOuterRadius/2, mPaint1); }度量過程和布局過程度量過程:調(diào)用onMeasure測算出各個子視圖的尺寸以及父視圖的尺寸(getMeasureWidth和getMeasureHeight)布局過程:根據(jù)父視圖大小限制,分配尺寸和位置給子視圖度量規(guī)格UNSPECIFIED:讓父視圖直接按照子視圖需求的尺寸進(jìn)行分配,比如一個LinearLayout在measure中就對子視圖使用UNSPECIFIED模型,它不限制大小,按照子視圖的需求進(jìn)行分配EXACTLY:強迫子視圖的尺寸必須按照父視圖分配的尺寸進(jìn)行測量,如果子視圖的實際尺寸比這個尺寸大則需要縮小,如果子視圖的實際尺寸比這個尺寸小則需要擴大AT_MOST:強迫讓子視圖使用最大的尺寸,子視圖的尺寸不得大于父視圖定義的最大尺寸,但是可以小于這個最大尺寸值(跟EXACTLY不一樣的是它可以小于這個尺寸值)16重寫onMeasure方法//重寫onMeasure方法protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
//得到度量規(guī)格模式MeasureSpec.getMode(widthMeasureSpec) intparentWidth=MeasureSpec.getSize(widthMeasureSpec); intparentHeight=(int)(mOuterRadius*2+100); //務(wù)必設(shè)置,否則會拋出異常 this.setMeasuredDimension(parentWidth,parentHeight); this.setLayoutParams( newLinearLayout.LayoutParams(parentWidth,parentHeight)); super.onMeasure(widthMeasureSpec,heightMeasureSpec);}響應(yīng)用戶輸入重寫View.onKeyDown或onTouchEvent @Override publicbooleanonTouchEvent(MotionEventevent){ //this.x=event.getX(); //this.y=event.getY(); Log.i(tag,"Click:"+event.getX()+","+event.getY()); this.mStatus=!mStatus; this.invalidate(); returnsuper.onTouchEvent(event); }軟鍵盤控制InputMethodManager輸入法服務(wù)Imm=this.getSystemService(INPUT_METHOD_SERVICE)窗口軟鍵盤狀態(tài)控制androidManifest.xml中Android:windowSoftInput屬性顯示Imm.showSoftInput(Viewview,intflags,ResultReceiverresultReceiver);隱藏imm.hideSoftInputFromWindow(WindowTokentoken,intflags);輸入法切換Imm.toggleSoftInput(intshowFlags,inthideFlags);19定義事件及監(jiān)聽器定義Toggle按鈕狀態(tài)改變時為一事件即ToggleChangedListener增加監(jiān)聽器接口setOnToggleChangeListener在狀態(tài)改變時,觸發(fā)監(jiān)聽器或通知使用者privateIToggleChangedListenermToggleChangedListener;publicinterfaceIToggleChangedListener{ voidToggleChanged(Viewv,booleanstatus);}publicvoidsetOnToggleChangedListener(IToggleChangedListenerlistener){ this.mToggleChangedListener=listener;}…if(this.mToggleChangedListener!=null) this.mToggleChangedListener.ToggleChanged(this,mStatus);….20實現(xiàn)控件支持配置文件定義在res/values的attrs.xml<?xmlversion="1.0"encoding="UTF-8"?><resources> <declare-styleablename="com.great.control.MyToggleButton"> <attrname="text"format="string|reference"/> <attrname="select"> <enumname="selected"value="1"/> <enumname="unselect"value="0"/> </attr> </declare-styleable></resources><com.great.control.MyToggleButtonxmlns:great=""android:id="@+id/tb"android:layout_width="wrap_content"android:layout_height="wrap_content"great:select="selected" great:text="測試"/>21讀取配置文件的屬性在MyToggleButton構(gòu)造函數(shù)中TypedArrayta=con
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省外語藝術(shù)職業(yè)學(xué)院單招職業(yè)適應(yīng)性考試題庫含答案
- 2025年甘肅財貿(mào)職業(yè)學(xué)院單招職業(yè)技能考試題庫及答案1套
- 2025年福建華南女子職業(yè)學(xué)院單招職業(yè)技能考試題庫及答案1套
- 2025年貴州航天職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫及完整答案1套
- 2025年甘肅有色冶金職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案參考
- 2025年廣東省湛江市單招職業(yè)傾向性測試題庫一套
- 2025年信貸銀行汽車貸款合同
- 生物基保鮮包裝探索-深度研究
- 環(huán)保型肥料生產(chǎn)技術(shù)-深度研究
- 源碼解析框架研究-深度研究
- 職業(yè)衛(wèi)生調(diào)查表
- 某安裝公司績效考核標(biāo)準(zhǔn)表
- 免疫學(xué)檢測技術(shù)的基本原理優(yōu)秀課件
- 2023年北京市實驗動物上崗證培訓(xùn)考試題庫完美精編版
- 第一講 文化概論
- 公路工程概論全套課件
- 中醫(yī)外科學(xué)瘡瘍課件
- 生物技術(shù)在園藝植物育種中的應(yīng)用課件
- 《荷花》課件(人教版三年級語文下冊課件)
- 《聲樂》課程標(biāo)準(zhǔn)(高職)
- 子宮切除術(shù)同意書
評論
0/150
提交評論