Android MultiTouch 多點(diǎn)觸控

演示效果

  • demo實(shí)現(xiàn)第一腔寡、二個(gè)觸控點(diǎn)的坐標(biāo)記錄及繪制展示


    e47k6-a128q.gif

多點(diǎn)觸控操作判斷的值

名稱 簡(jiǎn)介
pointerId 該值從按下到抬起是固定的表箭,用于判斷具體的觸控點(diǎn),通過(guò)getPointerId(int pointerIndex)方法獲得
pointerIndex 該值相當(dāng)于數(shù)組中的下標(biāo)今野,多個(gè)點(diǎn)按下時(shí),抬起點(diǎn)之后的pointerIndex值會(huì)重置罐农,用于獲取多點(diǎn)的坐標(biāo)等值条霜,ACTION_DOWNACTION_UP涵亏、ACTION_POINTER_DOWN宰睡、ACTION_POINTER_UP事件中可通過(guò)getActionIndex()方法獲得,也可通過(guò)findPointerIndex(int pointerId)方法獲得

關(guān)鍵代碼

    //第一個(gè)點(diǎn)的坐標(biāo)
    private Point mPointer1;
    //第二個(gè)點(diǎn)的坐標(biāo)
    private Point mPointer2;

    @Override
    protected void onDraw(Canvas canvas) {
        //第一個(gè)點(diǎn)不為空則在坐標(biāo)位置畫(huà)一個(gè)紅色的圓
        if (mPointer1 != null) {
            Paint paint = new Paint();
            paint.setColor(Color.RED);
            canvas.drawCircle(mPointer1.x, mPointer1.y, 100, paint);
        }
        //第二個(gè)點(diǎn)不為空則在坐標(biāo)位置畫(huà)一個(gè)黃色的圓
        if (mPointer2 != null) {
            Paint paint = new Paint();
            paint.setColor(Color.YELLOW);
            canvas.drawCircle(mPointer2.x, mPointer2.y, 100, paint);
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int pointerId = event.getPointerId(event.getActionIndex());
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                // 處理按下事件 第一個(gè)點(diǎn)按下時(shí)會(huì)觸發(fā)
                handleTouchDown(event, pointerId);
                break;
            case MotionEvent.ACTION_UP:
                // 處理抬起事件 最后一個(gè)點(diǎn)抬起時(shí)會(huì)觸發(fā)气筋,抬起后將點(diǎn)都置為null
                mPointer1 = null;
                mPointer2 = null;
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                // 處理按下事件 非第一個(gè)點(diǎn)按下時(shí)會(huì)觸發(fā)
                handleTouchDown(event, pointerId);
                break;
            case MotionEvent.ACTION_POINTER_UP:
                // 處理抬起事件 非最后一個(gè)點(diǎn)抬起時(shí)會(huì)觸發(fā)
                handleTouchUp(pointerId);
                break;
            case MotionEvent.ACTION_CANCEL:
                // 事件取消時(shí)會(huì)被觸發(fā)
                handleTouchUp(pointerId);
                break;
            case MotionEvent.ACTION_MOVE:
                // 觸控滑動(dòng)時(shí)觸發(fā)
                handleTouchMove(event);
                break;
        }
        // 重新繪制
        invalidate();
        return true;
    }

    private void handleTouchMove(MotionEvent event) {
        int pointerId;
        // Move事件無(wú)法直接獲得pointerIndex 直接通過(guò)遍歷獲得
        int count = event.getPointerCount();
        for (int i = 0; i < count; i++) {
            // 通過(guò)pointerIndex 獲得pointerId 
            pointerId = event.getPointerId(i);
            // 通過(guò)pointerId 判斷是哪個(gè)點(diǎn)
            switch (pointerId) {
                case 0:
                    mPointer1.set((int) event.getX(i), (int) event.getY(i));
                    break;
                case 1:
                    mPointer2.set((int) event.getX(i), (int) event.getY(i));
                    break;
            }
        }
    }

    private void handleTouchUp(int pointerId) {
        //判斷抬起的點(diǎn) 清楚記錄數(shù)據(jù)
        switch (pointerId) {
            case 0:
                mPointer1 = null;
                break;
            case 1:
                mPointer2 = null;
                break;
        }
    }

    private void handleTouchDown(MotionEvent event, int pointerId) {
        int pointerIndex = event.findPointerIndex(pointerId);
        //判斷按下的點(diǎn) 記錄相應(yīng)的點(diǎn)
        switch (pointerId) {
            case 0:
                mPointer1 = new Point((int) event.getX(pointerIndex), (int) event.getY(pointerIndex));
                break;
            case 1:
                mPointer2 = new Point((int) event.getX(pointerIndex), (int) event.getY(pointerIndex));
                break;
        }
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拆内,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子裆悄,更是在濱河造成了極大的恐慌矛纹,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件光稼,死亡現(xiàn)場(chǎng)離奇詭異或南,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)艾君,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門采够,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冰垄,你說(shuō)我怎么就攤上這事蹬癌。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵逝薪,是天一觀的道長(zhǎng)隅要。 經(jīng)常有香客問(wèn)我,道長(zhǎng)董济,這世上最難降的妖魔是什么步清? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮虏肾,結(jié)果婚禮上廓啊,老公的妹妹穿的比我還像新娘。我一直安慰自己封豪,他們只是感情好谴轮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吹埠,像睡著了一般第步。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缘琅,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天雌续,我揣著相機(jī)與錄音,去河邊找鬼胯杭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛受啥,可吹牛的內(nèi)容都是我干的做个。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滚局,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼居暖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起藤肢,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤太闺,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嘁圈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體省骂,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年最住,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钞澳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涨缚,死狀恐怖轧粟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤兰吟,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布通惫,位于F島的核電站,受9級(jí)特大地震影響混蔼,放射性物質(zhì)發(fā)生泄漏履腋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一拄丰、第九天 我趴在偏房一處隱蔽的房頂上張望府树。 院中可真熱鬧,春花似錦料按、人聲如沸奄侠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垄潮。三九已至,卻和暖如春闷盔,著一層夾襖步出監(jiān)牢的瞬間弯洗,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工逢勾, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牡整,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓溺拱,卻偏偏與公主長(zhǎng)得像逃贝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子迫摔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 很多人私信告訴我沐扳,很喜歡我們first dance的鏡頭,希望多了解一下如何在婚禮中加入這個(gè)元素句占。今天和大家分享一...
    Vera_TheVows閱讀 2,765評(píng)論 0 2
  • 2018年04月01日 晴 星期日 今天雖是晴天纱烘,整個(gè)世界卻被霧霾籠罩著杨拐。最近這時(shí)好時(shí)壞的天氣,猶如我這心情一般凹炸。...
    88e0f11044fa閱讀 391評(píng)論 1 6
  • 2017年3月22日零時(shí)一刻戏阅,我的乖兒子松松走了!他才16歲啤它!花一樣的年齡奕筐!他到天堂去了舱痘!那里沒(méi)有病疼的折磨!只有...
    閑度閱讀 248評(píng)論 1 1
  • 我的
    二十八畫(huà)后生閱讀 165評(píng)論 0 0
  • 文/涼月西風(fēng) 正月十七离赫,開(kāi)學(xué)第一天芭逝。 因?yàn)檎率呀?jīng)開(kāi)過(guò)預(yù)備會(huì),今天按照要求七點(diǎn)半就到學(xué)了渊胸。 學(xué)生還是狗年的學(xué)生...
    涼月西風(fēng)閱讀 271評(píng)論 2 6