久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 安(an)卓中區分(fen)點擊事件(jian)和滑動(dong)事件(jian)

安卓(zhuo)中(zhong)區(qu)分點(dian)擊事件和滑動事件 時間:2014-08-20      來源:未知

為了(le)實時的(de)感應用戶(hu)(hu)對屏幕的(de)手指操(cao)作(zuo)(zuo),安卓系統提供了(le)onTouchEvent()方法(fa)來捕獲用戶(hu)(hu)操(cao)作(zuo)(zuo)的(de)事件,其經常使用的(de)有三類: ACTION_DOWN, ACTION_UP, ACTION_MOVE。

現(xian)在(zai)想要實現(xian)的效果(guo)是:當手(shou)機按(an)住屏幕(mu)時,如(ru)果(guo)在(zai)指(zhi)定的時間內沒有(you)移動(dong),那么識(shi)別為點擊(ji)圖(tu)標(biao)。如(ru)果(guo)手(shou)指(zhi)按(an)住屏幕(mu)就(jiu)立馬移動(dong),那么就(jiu)識(shi)別為拖動(dong)圖(tu)標(biao)。

一(yi)般情(qing)況(kuang)下,我們想實現(xian)什么樣(yang)的(de)(de)(de)(de)方法(fa),只需要(yao)在(zai)對應的(de)(de)(de)(de)類下邊編寫(xie)算(suan)法(fa)即可(ke)。大概思路(lu)如下:在(zai)按下時(shi)(shi)記錄x,y坐標以及按下時(shi)(shi)間(jian),當第(di)一(yi)次移動的(de)(de)(de)(de)時(shi)(shi)候(hou)獲取移動的(de)(de)(de)(de)時(shi)(shi)間(jian),如果大于(yu)指定的(de)(de)(de)(de)長(chang)按時(shi)(shi)間(jian),那么識別為點(dian)擊,否(fou)則就(jiu)是(shi)(shi)節點(dian)拖動。很(hen)容易,在(zai)模擬器(qi)里面(mian)實現(xian)了這個(ge)效果,但是(shi)(shi)當在(zai)真機(ji)里面(mian)運行時(shi)(shi),卻(que)無法(fa)實現(xian)這樣(yang)的(de)(de)(de)(de)效果。原因是(shi)(shi)模擬器(qi)點(dian)擊的(de)(de)(de)(de)時(shi)(shi)候(hou)能夠保(bao)證在(zai)不移動鼠標的(de)(de)(de)(de)情(qing)況(kuang)下不觸發ACTION_MOVE,但是(shi)(shi)真機(ji)卻(que)很(hen)敏感(gan),幾(ji)乎在(zai)ACTION_DOWN后的(de)(de)(de)(de)幾(ji)毫秒(miao)之后就(jiu)立馬不停的(de)(de)(de)(de)ACTION_MOVE了。所以,單單從(cong)手(shou)指按下的(de)(de)(de)(de)時(shi)(shi)間(jian)長(chang)短上(shang)區分(fen)點(dian)擊事(shi)件(jian)和滑動時(shi)(shi)間(jian)并(bing)不是(shi)(shi)很(hen)理想,所以,在(zai)這里將要(yao)介紹另一(yi)種(zhong)方法(fa):通(tong)過按下后手(shou)指的(de)(de)(de)(de)位移大小來(lai)區分(fen)事(shi)件(jian)。

MotionEvent 類(lei)提(ti)供了記錄(lu)當前(qian)坐標的(de)(de)函(han)數(getX(),getY())和當前(qian)事(shi)件產生的(de)(de)時(shi)(shi)間的(de)(de)函(han)數(getEventTime())以及(ji)按(an)下時(shi)(shi)間 (getDowntime())。MotionEvent同時(shi)(shi)也提(ti)供了當前(qian)的(de)(de)操(cao)作類(lei)型(xing),按(an)下(ACTION_DOWN)、 移動 (ACTION_MOVE)、彈起 (ACTION_UP)。有(you)了這些參數,我們便可(ke)以輕(qing)易(yi)的(de)(de)實現(xian)想要(yao)的(de)(de)效果了。

當一開始點擊的(de)時候,記錄下當前(qian)的(de)位置(zhi)坐(zuo)標

public boolean onTouchEvent(MotionEvent event) {
                // TODO Auto-generated method stub
                float x = 0;
                float y = 0;
                button = false; 

                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                        x = event.getX();
                        y = event.getY();
                        for (moveNodeNum = 0; moveNodeNum < NUM; moveNodeNum++) {
                                if ((x < zNode[moveNodeNum].posX + TOUCHRADIUS)
                                && (x > zNode[moveNodeNum].posX - TOUCHRADIUS)
                                && (y < zNode[moveNodeNum].posY + TOUCHRADIUS)
                                && (y > zNode[moveNodeNum].posY - TOUCHRADIUS)) {
                                        tx = zNode[moveNodeNum].posX;
                                        ty = zNode[moveNodeNum].posY;

當手(shou)指產(chan)生(sheng)位移時候(hou),判斷(duan)位移的大小

else if (event.getAction() == MotionEvent.ACTION_MOVE) {
                x = event.getX();
                y = event.getY();

                if ((moveNodeNum >= 0) && (moveNodeNum < NUM)) {
                        if (moveNodeKind == 1) {
                                if ((Math.abs(x - tx) > 30) || (Math.abs(y - ty) > 30)) {
                                        button = false;

如(ru)果小于30像素的時候(hou),認(ren)為手(shou)指只是有輕微(wei)的移動,即識別為點擊,不識別為拖動,更(geng)改button 來實現效(xiao)果的判斷。

if (button == true) {//為真時為點擊效果,為假時識別(bie)為拖(tuo)動(dong)

只要在對(dui)應(ying)button的不(bu)同位置實現相應(ying)的代碼(ma)即可。

上一篇:Android ril移植-6410開發板SIM300模塊

下一篇:Java中的throws與throw關鍵字

熱點文(wen)章推薦(jian)
華清學員就(jiu)業榜單
高(gao)薪學員經驗分享
熱點新聞推薦
前(qian)臺(tai)專(zhuan)線:010-82525158 企業(ye)培(pei)訓洽(qia)談專線(xian):010-82525379 院校合作(zuo)洽(qia)談專(zhuan)線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部