




全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
供稿【安卓深度控件開發(fā)(1.3)】Creating Custom Views (官方示例文檔漢化版)(3) 創(chuàng)建視圖交互 圖形用戶界面只是創(chuàng)建自定義視圖的一部分。您還需要使視圖以模仿現(xiàn)實(shí)世界行動相似的方式響應(yīng)用戶輸入。對象始終應(yīng)像真正對象做的一樣。例如,圖像應(yīng)不立即彈出并重現(xiàn)在某個(gè)地方別的地方,因?yàn)樵诂F(xiàn)實(shí)世界中的對象不會這樣做。相反,圖像應(yīng)從一個(gè)位置移動到另一個(gè)位置。 用戶也感覺到細(xì)微的行為或界面上響應(yīng)最佳模仿現(xiàn)實(shí)世界中的細(xì)微之處。例如,當(dāng)用戶甩動一個(gè) UI 對象,他們應(yīng)該感覺動作繼續(xù),摩擦然后在最終停止,最后的位置超出甩動發(fā)生時(shí)的位置。 這節(jié)課演示如何使用 Android 框架的功能,將這些真實(shí)世界的行為添加到您的自定義視圖。 處理輸入的手勢 像許多其他 UI 框架,android 系統(tǒng)支持輸入的事件模型。用戶操作都變成觸發(fā)回調(diào)的事件,您可以重寫自定義您的應(yīng)用程序如何響應(yīng)用戶的回調(diào)。在 Android 系統(tǒng)中最常見的輸入的事件是觸摸,而觸發(fā) onTouchEvent(android.view.MotionEvent)。重寫此方法以處理事件: Override public boolean onTouchEvent(MotionEvent event) return super.onTouchEvent(event); 觸控事件本身不是特別有用的?,F(xiàn)代觸摸 Ui 定義交互的點(diǎn)擊、 拉、 推、 甩動和放大的手勢。若要將原始觸控事件轉(zhuǎn)換手勢,Android 提供了 GestureDetector。 通過傳入一個(gè)實(shí)現(xiàn) GestureDetector.OnGestureListener 類的一個(gè)實(shí)例構(gòu)造 GestureDetector。如果您只想要處理幾個(gè)手勢,您可以擴(kuò)展 GestureDetector.SimpleOnGestureListener,而不是實(shí)現(xiàn) GestureDetector.OnGestureListener 接口。例如,此代碼創(chuàng)建一個(gè)類,擴(kuò)展了 GestureDetector.SimpleOnGestureListener 和重寫 onDown(MotionEvent)。 class mListener extends GestureDetector.SimpleOnGestureListener Override public boolean onDown(MotionEvent e) return true; mDetector = new GestureDetector(PieChart.this.getContext(), new mListener(); 無論是否使用 GestureDetector.SimpleOnGestureListener,您必須實(shí)現(xiàn)一個(gè) onDown() 方法,返回 true。此步驟是必需的因?yàn)樗械氖謩蓍_始與 onDown() 消息。如果您從 onDown() 返回 false,如同 GestureDetector.SimpleOnGestureListener,系統(tǒng)將假定您想要忽略其余的姿態(tài),GestureDetector.OnGestureListener 的其他方法永遠(yuǎn)不會被調(diào)用。只有如果您真正想要忽略整個(gè)手勢時(shí)應(yīng)該返回 false 。GestureDetector.OnGestureListener 一旦和創(chuàng)建的 GestureDetector 實(shí)例,您可以使用您的 GestureDetector 來解釋您收到在 onTouchEvent() 中的觸摸事件。 Overridepublic boolean onTouchEvent(MotionEvent event) boolean result = mDetector.onTouchEvent(event); if (!result) if (event.getAction() = MotionEvent.ACTION_UP) stopScrolling(); result = true; return result; 當(dāng)您傳遞 onTouchEvent() 一個(gè)觸摸事件,它不能識別作為一種姿態(tài)的一部分時(shí),它將返回 false。然后,您可以運(yùn)行您自己的自定義手勢檢測代碼。 創(chuàng)建物理運(yùn)動 手勢是控制觸摸屏設(shè)備,功能強(qiáng)大的方法,但他們可以是違反直覺的很難記住除非他們產(chǎn)生物理可信的結(jié)果。一個(gè)很好的例子是甩動姿勢,用戶快速地在屏幕上移動手指,然后舉起它。這種姿態(tài)是如果用戶界面響應(yīng)快速移動的方向的甩動,然后放慢,猶如該用戶已推上飛輪和設(shè)置它旋轉(zhuǎn)的道理的。 但是,模擬飛輪的感覺并很簡單。物理和數(shù)學(xué)的很多都需要得到正常的飛輪模型。幸運(yùn)的是,Android 提供了幫助器類來模擬這和其他的行為。Scroller 類是用于處理飛輪樣式甩動手勢的基礎(chǔ)。 若要啟動甩動,調(diào)用 fling() 與甩動起始的速度和最小和最大 x 和 y 值。對于速度值,您可以使用由 GestureDetector 為您計(jì)算的值。 Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) mScroller.fling(currentX, currentY, velocityX / SCALE, velocityY / SCALE, minX, minY, maxX, maxY); postInvalidate(); 注: 雖然按 GestureDetector 計(jì)算的速度是物理上準(zhǔn)確的,但許多開發(fā)人員覺得甩動動畫使用此值太快。它是通常使用 x 和 y 除 4 至 8 倍的速度。 調(diào)用 fling() 設(shè)置一個(gè)甩動手勢。之后,您需要通過定時(shí)調(diào)用 SputeScrollOffset() 來更新 Scroller,computeScrollOffset() 通過甩動設(shè)置的初始屬性與當(dāng)前時(shí)間,計(jì)算當(dāng)時(shí)的 x 與 y 坐標(biāo)。調(diào)用 getCurrX() 與 getCurY() 獲取該值。 多數(shù)視圖通過調(diào)用 scrollTo() 直接設(shè)置 Scroller 的 x,y。PieChart 示例中稍有不同:它使用當(dāng)前滾動 y 坐標(biāo)設(shè)置餅的旋轉(zhuǎn)角度。 if (!mScroller.isFinished() mSputeScrollOffset(); setPieRotation(mScroller.getCurrY(); Scroller 類可以為您計(jì)算滾動坐標(biāo),但它不會自動應(yīng)用到您的視圖。您需要獲取和應(yīng)用平滑的滾動動畫。有兩種方式實(shí)現(xiàn): 在調(diào)用 fling() 之后調(diào)用 postInvalidate() 強(qiáng)制重繪。這種技術(shù)需要您在 onDraw() 中計(jì)算滾動偏移并在每次滾動偏移改變時(shí)使用 postInvalidate()。 設(shè)置一個(gè) ValueAnimator 處理甩動動畫并使用 addUpdateListener() 持續(xù)處理動畫更新。 PieChart 示例使用了第二種方法。這種技術(shù)稍復(fù)雜,但它與動畫系統(tǒng)密切工作,能夠減少不必要的重繪請求。缺點(diǎn)是 ViewAnimator 不在 API 11 版本之前提供,所以不能在 Android 版本低于 3.0 的設(shè)備上使用。 注: 雖然 ValueAnimator 不能在 API 11 之前使用,但你仍可以在低于這個(gè) API 級別上運(yùn)行。您只需要在運(yùn)行時(shí)進(jìn)行版本測試,如果低于 11 就活力視圖動畫請求。 mScroller = new Scroller(getContext(), null, true); mScrollAnimator = ValueAnimator.ofFloat(0,1); mScrollAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() Override public void onAnimationUpdate(ValueAnimator valueAnimator) if (!mScroller.isFinished() mSputeScrollOffset(); setPieRotation(mScroller.getCurrY(); else mScrollAnimator.cancel(); onScrollFinished(); ); 平滑過渡 用戶所期待的現(xiàn)代UI在各狀態(tài)間平滑過渡。UI 元素淡入淡出而不是直接顯示與消失。動作平滑的開始和結(jié)束而非突然開始和停止。Android 3.0 提供了屬性動畫框架讓平滑過渡更簡單。 若要使用動畫系統(tǒng),將會影響視圖外觀的屬性更改時(shí),不要直接更改該屬性。相反,使用 ValueAnimator 來進(jìn)行更改。在以下示例中,修改當(dāng)前所選的餅圖扇區(qū)在餅圖中使整個(gè)圖表旋轉(zhuǎn),使選擇指針位于所選切片的中心。ValueAnimator 在一段幾百毫秒時(shí)間內(nèi)更改旋轉(zhuǎn),而不是立即設(shè)置新的旋轉(zhuǎn)值。 mAutoCenterAnimator = ObjectAnimator.ofInt(PieChart.this, "PieRotation", 0);mAutoCenterAnimator.setIntValues(targetAngle);mAutoCenterAnimator.setDur
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- XXXX小學(xué)校服專項(xiàng)問題整治自查情況報(bào)告范文
- 2025年醫(yī)院電子病歷系統(tǒng)在醫(yī)療科研中的應(yīng)用優(yōu)化報(bào)告
- 2025年醫(yī)院電子病歷系統(tǒng)優(yōu)化構(gòu)建醫(yī)療信息化安全防護(hù)體系與技術(shù)創(chuàng)新報(bào)告
- 2025年醫(yī)藥市場醫(yī)藥電商發(fā)展趨勢:仿制藥一致性評價(jià)下的機(jī)遇報(bào)告
- 2025年醫(yī)藥企業(yè)研發(fā)外包(CRO)與臨床試驗(yàn)監(jiān)管政策報(bào)告
- 咨詢工程師2019課件
- 鄉(xiāng)村振興視角下2025年職業(yè)技能培訓(xùn)的職業(yè)技能標(biāo)準(zhǔn)制定報(bào)告
- 新型頁巖氣開采技術(shù)2025環(huán)境影響評估與綠色礦山建設(shè)標(biāo)準(zhǔn)研究報(bào)告
- 原始點(diǎn)健康講座課件
- 預(yù)制菜行業(yè)2025年市場細(xì)分與消費(fèi)者購買行為研究報(bào)告
- 項(xiàng)目工程EHS管理
- 產(chǎn)品合格證模板-合格證模板樣本
- 免疫學(xué)(全套課件)
- 熱力工程竣工資料模板(含換熱站)全
- 半導(dǎo)體中載流子的統(tǒng)計(jì)分布和計(jì)算
- 心血管診治與搶救標(biāo)準(zhǔn)操作規(guī)程(SOP)
- 橋梁養(yǎng)護(hù)與加固教案
- 中南大學(xué)自主招生綜合素質(zhì)測試面試試題答題技巧
- 密度計(jì)和浮力秤問題
- 國之瑰寶 京劇(說課課件)
- 附表:1.臨汾市市直行政事業(yè)單位定點(diǎn)加油通知單
評論
0/150
提交評論