Android入門之onTouchEvent觸碰事件的示例詳解
簡介
平時(shí)包括之前的例子大量是基于TouchListener如:onClick這種一類的事件。
今天給大家?guī)淼氖荰ouchListener與OnTouchEvent的比較,以及多點(diǎn)觸碰的知識(shí)點(diǎn)! TouchListener是基于監(jiān)聽的,而OnTouchEvent則是基于回調(diào)的!
因此我們通過一個(gè)小例子,來擅述同樣是觸碰事件的ouTouchEvent是什么樣的。
onTouchEvent應(yīng)用場景
onTouchEvent更多的是用于自定義的view,所有的view類中都重寫了該方法,而這種觸摸事件是基于回調(diào)的,也就是說:如果我們返回的值是false的話,那么事件會(huì)繼續(xù)向外傳播,由外面的容器或者Activity進(jìn)行處理!當(dāng)然還涉及到了手勢(Gesture),這個(gè)我們會(huì)在后面進(jìn)行詳細(xì)的講解!onTouchEvent其實(shí)和onTouchListener是類似的,只是處理機(jī)制不用,前者是回調(diào),后者是監(jiān)聽模式!
樣例說明
代碼示例: 定義一個(gè)簡單的view,繪制一個(gè)藍(lán)色的小圓,可以跟隨手指進(jìn)行移動(dòng)
實(shí)現(xiàn)代碼: CircleView.java。
全代碼
前端
CircleView.java
對(duì),你沒看錯(cuò)!
這個(gè)不是.xml文件。它長下面這個(gè)樣
package org.mk.android.demo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class CircleView extends View { public float X = 50; public float Y = 50; //創(chuàng)建畫筆 Paint paint = new Paint(); public CircleView(Context context, AttributeSet set) { super(context,set); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); paint.setColor(Color.RED); canvas.drawCircle(X,Y,50,paint); } @Override public boolean onTouchEvent(MotionEvent event) { this.X = event.getX(); this.Y = event.getY(); //通知組件進(jìn)行重繪 this.invalidate(); return true; } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <org.mk.android.demo.CircleView android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RelativeLayout>
我們把這個(gè)java在activity_main.xml文件中如上這樣引用。此時(shí)設(shè)計(jì)器已經(jīng)顯示出來效果了。
后端
package org.mk.android.demo; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
哈哈哈,是一個(gè)光板。
因?yàn)樗械倪壿嫛⒂|碰事件都已經(jīng)在CircleView.java里實(shí)現(xiàn)了。
運(yùn)行起來后,你的界面上就會(huì)有一個(gè)小紅圓圈,請(qǐng)你用鼠標(biāo)拖著這個(gè)小紅圓圈不要放到處拖,這個(gè)小紅圓圈也會(huì)跟隨著你的鼠標(biāo)到處亂跑。
自己請(qǐng)動(dòng)一下手試試看吧。
后續(xù)
對(duì)于單指、雙指縮放等手勢,其實(shí)也很簡單,就是我們的onTouchEvent(MotionEvent event)里的這個(gè)MotionEvent,它還有額外幾個(gè)事件
- MotionEvent.ACTION_POINTER_DOWN:當(dāng)屏幕上已經(jīng)有一個(gè)點(diǎn)被按住,此時(shí)再按下其他點(diǎn)時(shí)觸發(fā)。
- MotionEvent.ACTION_POINTER_UP:當(dāng)屏幕上有多個(gè)點(diǎn)被按住,松開其中一個(gè)點(diǎn)時(shí)觸發(fā)(即非最后一個(gè)點(diǎn)被放開時(shí))。
因此我留下一個(gè)回家作業(yè),即:在Android上實(shí)現(xiàn)以下這兩個(gè)功能讓大家去自己試試
- 單指點(diǎn)擊一個(gè)圖片拖動(dòng);
- 雙指對(duì)著一個(gè)圖片進(jìn)行“縮放”,便得相應(yīng)的圖片的大小也跟著你的雙指的縮放作“伸縮”;
真心很簡單,提示:提供以下原理性代碼供你去實(shí)現(xiàn)這個(gè)小作業(yè)。
switch (event.getAction() & MotionEvent.ACTION_MASK) { // 單指 case MotionEvent.ACTION_DOWN: break; // 雙指 case MotionEvent.ACTION_POINTER_DOWN:
到此這篇關(guān)于Android入門之onTouchEvent觸碰事件的示例詳解的文章就介紹到這了,更多相關(guān)Android onTouchEvent觸碰事件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android不壓縮圖片實(shí)現(xiàn)高清加載巨圖實(shí)例
這篇文章主要為大家介紹了Android不壓縮圖片實(shí)現(xiàn)高清加載巨圖實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Android實(shí)現(xiàn)記住用戶名和密碼功能
登陸界面創(chuàng)建一個(gè)復(fù)選按鈕,通過按鈕選取來進(jìn)行事件處理。若按鈕選中記住賬號(hào)和密碼的信息,本文教大家如何使用Android實(shí)現(xiàn)記住用戶名和密碼功能,感興趣的小伙伴們可以參考一下2016-05-05Android 中ListView和GridView賦值錯(cuò)位
這篇文章主要介紹了Android 中ListView和GridView賦值錯(cuò)位的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10Android自定義recyclerView實(shí)現(xiàn)時(shí)光軸效果
這篇文章主要介紹了Android自定義recyclerView實(shí)現(xiàn)時(shí)光軸效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Android 自定義View實(shí)現(xiàn)芝麻分曲線圖效果
這篇文章主要介紹了Android 自定義View實(shí)現(xiàn)芝麻分曲線圖效果的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11Android UI設(shè)計(jì)系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線的文本框(4)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線的文本框,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06Android-Service實(shí)現(xiàn)手機(jī)壁紙自動(dòng)更換
這篇文章主要為大家詳細(xì)介紹了Android-Service實(shí)現(xiàn)手機(jī)壁紙自動(dòng)更換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11如何在Android 中實(shí)現(xiàn)scp操作
這篇文章主要介紹了如何在Android 中實(shí)現(xiàn)scp操作,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下2021-03-03android實(shí)現(xiàn)貝塞爾曲線之波浪效果
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)貝塞爾曲線之波浪效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Android自定義ScrollView實(shí)現(xiàn)放大回彈效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ScrollView實(shí)現(xiàn)放大回彈效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05