<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Android手勢(shì)學(xué)習(xí)之單點(diǎn)手勢(shì)

          Android手勢(shì)學(xué)習(xí)之單點(diǎn)手勢(shì)

          作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

          說在前面,很早時(shí),android就開始有支持單點(diǎn)手勢(shì)(單點(diǎn)觸控),到android2.2開始支持多點(diǎn)觸控.

          本文引用地址:http://www.ex-cimer.com/article/201610/305460.htm

          不同的動(dòng)作序列合起來表示不同的手勢(shì)。比如Fling手勢(shì)包括三個(gè)過程:將手指按觸在屏幕上,然后快速掃過,最后

          抬起手指,并且在抬起手指仍然在運(yùn)動(dòng)(也就是說抬起手指前,運(yùn)動(dòng)的速度并不會(huì)減少).每一個(gè)步操作都會(huì)觸發(fā)相應(yīng)的事件。

          在View控件內(nèi),開發(fā)人員可以像處理普通的單擊事件時(shí)使用setOnClickListener()和setOnLongClickListener()

          方法一樣處理手勢(shì)。onTouchEvent()回調(diào)方法用于探測(cè)View區(qū)域內(nèi)的用戶動(dòng)作。

          onTouchEvent()回調(diào)方法只接收一個(gè)參數(shù)。MotionEvent對(duì)象。MotionEvent對(duì)象包含在View內(nèi)觸發(fā)的所有類型動(dòng)作

          的細(xì)節(jié),通過收集和分析連續(xù)的MotionEvent對(duì)象,開發(fā)人員可以確定產(chǎn)生了何種手勢(shì)。你可以使用MotionEvent數(shù)據(jù)

          來識(shí)別的探測(cè)任何你能想像的手勢(shì)。不過你也可以使用Android SDK 內(nèi)置的手勢(shì)探測(cè)器來探測(cè)普通的用戶動(dòng)作。

          android目前擁有兩個(gè)不同的類用于手勢(shì)探測(cè)。

          (1) GestureDetector類可以用于探測(cè)一般的單點(diǎn)觸控手勢(shì)。

          (2) ScaleGestureDetector可以用來探測(cè)多點(diǎn)縮放操作手勢(shì)。

          除了普通的方向性手勢(shì),你還可以使用API level 4中引入的android.gesture包中的GestureOverlayView來識(shí)別命令手勢(shì)。

          下面主要是處理普通單點(diǎn)觸控手勢(shì)

          API level 1中引入的GestureDetector類可以用來探測(cè)單個(gè)手勢(shì)。GestureDetector類所支持的單指手勢(shì)包括以下幾種。

          onDown:當(dāng)用戶第一次按觸屏幕時(shí)觸發(fā)。

          onShowPress:當(dāng)用戶按觸屏幕,并且在抬起或移動(dòng)手指之前觸發(fā):用于顯示顯示地指示按觸事件確已探測(cè)到。

          onSingleTapUp:作為單擊(sinlge-tap)事件的一部分,在用戶從觸屏上抬起手指(使用抬起MotionEvent)時(shí)觸發(fā)。

          onSingleTabConfirmed:單擊事件發(fā)生時(shí)調(diào)用。

          onDoubleTab:雙擊(double-tap)事件發(fā)生時(shí)調(diào)用。

          onDoubleTabEvent:在任何雙擊手勢(shì)發(fā)生時(shí)調(diào)用,包括按下(down),移動(dòng),或抬起(up)MotionEvent.

          onLongPress:與onSingleTapUp類似,但只在用戶保持按觸狀態(tài)且不移動(dòng)一定時(shí)間,并且不是標(biāo)準(zhǔn)的單擊操作時(shí)調(diào)用。

          onScroll:用戶按下手指并且勻速移動(dòng)手指后,在抬起手指前調(diào)用。通常也稱為“拖曳”(dragging).

          onFling:在用戶按下并且加速移動(dòng)手指后,在抬起手指前調(diào)用,通常也稱為拂動(dòng)(flick)手勢(shì)。

          提示:你可以使用GestureDetector.SimpleOnGestureListener類來監(jiān)聽由GestureDetector識(shí)別的任何手勢(shì)。

          實(shí)例:在Android中實(shí)現(xiàn)圖片左右滑動(dòng)效果。

          參考來自:

          http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html

          原文比較詳細(xì),在此不轉(zhuǎn)。注意的一點(diǎn)就是,為了不帶那些不用的方法,可以繼承SimpleOnGestureListener類。

          說一下,我個(gè)人的感受。

          1.受到一些網(wǎng)上不正確的文章,實(shí)習(xí)OnTouchListener了。

          結(jié)果,本來應(yīng)該重寫GestureDetector.OnGestureListener接口的

          onTouchEvent方法時(shí),實(shí)現(xiàn)了onTouch()方法,害我老是看不到效果,這里弄,那里查,結(jié)果,找了開始那本書學(xué)習(xí)。

          系統(tǒng)學(xué)習(xí)之后,然后我看源代碼。發(fā)現(xiàn)了GestureDetector類這樣的javadoc:

          1/**

          2* To use this class:

          3 *

            4 *

          • Create an instance of the {@code GestureDetector} for your {@link View}

            5 *

          • In the {@link View#onTouchEvent(MotionEvent)} method ensure you call

            6 * {@link #onTouchEvent(MotionEvent)}. The methods defined in your callback

            7 * will be executed when the events occur.

            8 *

          9**/

          上面那個(gè)ensure讓我覺得應(yīng)該檢查下是不是實(shí)現(xiàn)了。然后,結(jié)果就出來了。哈哈。太不小心了。

          關(guān)于判斷手勢(shì)效果的代碼:

          1Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT);

          2 if (e1.getX() - e2.getX() > 120) {

          3 this.mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));

          4 this.mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));

          5this.mFlipper.showNext();

          6 return true;

          7 }

          1.上面觸發(fā)事件時(shí),我寫有Toast提醒代碼,但是實(shí)際上,用戶看不到。

          2.第二 上面判斷手勢(shì)距離要求120px有點(diǎn)大長(zhǎng)了。

          下面學(xué)習(xí)下其中起到關(guān)鍵作用的另外一個(gè)類。ViewFlipper.

          ViewFlipper的類繼承關(guān)系如下:

          ViewFlipper->ViewAnimator->FrameLayout->ViewGroup->View->Object

          看一下類描述:(中文翻譯來自Android中文翻譯組)

          1/**

          2 * Simple {@link ViewAnimator} that will animate between two or more views

          3 * that have been added to it. Only one child is shown at a time. If

          4 * requested, can automatically flip between each child at a regular interval.

          5 *

          6被添加到ViewFlipper中的兩個(gè)或兩個(gè)以上的視圖之間將執(zhí)行一個(gè)簡(jiǎn)單的ViewAnimator動(dòng)畫。

          1一次僅能顯示一個(gè)子視圖。如果需要,可以設(shè)置間隔時(shí)間使子視圖像幻燈片一樣自動(dòng)顯示。

          1(譯者注:com.example.android.apis.view/Animation_2.java包含該類示例程序)

          2

          3 * @attr ref android.R.styleable#ViewFlipper_flipInterval

          4 * @attr ref android.R.styleable#ViewFlipper_autoStart

          5 */

          經(jīng)過使用SimpleOnGestureListener類后的全部Java代碼如下:

          01package me.banxi.slideapp;

          02

          03import android.app.Activity;


          上一頁 1 2 下一頁

          關(guān)鍵詞:

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();