Android入門之onTouchEvent觸碰事件的示例詳解
簡(jiǎn)介
平時(shí)包括之前的例子大量是基于TouchListener如:onClick這種一類的事件。
今天給大家?guī)淼氖荰ouchListener與OnTouchEvent的比較,以及多點(diǎn)觸碰的知識(shí)點(diǎn)! TouchListener是基于監(jiān)聽的,而OnTouchEvent則是基于回調(diào)的!
因此我們通過一個(gè)小例子,來擅述同樣是觸碰事件的ouTouchEvent是什么樣的。
onTouchEvent應(yīng)用場(chǎng)景
onTouchEvent更多的是用于自定義的view,所有的view類中都重寫了該方法,而這種觸摸事件是基于回調(diào)的,也就是說:如果我們返回的值是false的話,那么事件會(huì)繼續(xù)向外傳播,由外面的容器或者Activity進(jìn)行處理!當(dāng)然還涉及到了手勢(shì)(Gesture),這個(gè)我們會(huì)在后面進(jìn)行詳細(xì)的講解!onTouchEvent其實(shí)和onTouchListener是類似的,只是處理機(jī)制不用,前者是回調(diào),后者是監(jiān)聽模式!
樣例說明

代碼示例: 定義一個(gè)簡(jiǎn)單的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ì),其實(shí)也很簡(jiǎn)單,就是我們的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)的圖片的大小也跟著你的雙指的縮放作“伸縮”;
真心很簡(jiǎn)單,提示:提供以下原理性代碼供你去實(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 SQLite數(shù)據(jù)庫操作代碼類分享
這篇文章主要介紹了Android SQLite數(shù)據(jù)庫操作代碼類分享,本文直接給出實(shí)現(xiàn)代碼和使用代碼,需要的朋友可以參考下2015-03-03
Android?Settings?跳轉(zhuǎn)流程方法詳解
這篇文章主要為大家介紹了Android?Settings跳轉(zhuǎn)流程方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
Android通過多點(diǎn)觸控的方式對(duì)圖片進(jìn)行縮放的實(shí)例代碼
這篇文章主要介紹了Android通過多點(diǎn)觸控的方式對(duì)圖片進(jìn)行縮放的實(shí)例代碼,完成了點(diǎn)擊圖片就能瀏覽大圖的功能,并且在瀏覽大圖的時(shí)候還可以通過多點(diǎn)觸控的方式對(duì)圖片進(jìn)行縮放。2018-05-05
Android Activity回收與操作超時(shí)處理
這篇文章主要介紹了Android Activity回收與操作超時(shí)的相關(guān)處理操作,感興趣的小伙伴們可以參考一下2016-04-04
Android ScrollView實(shí)現(xiàn)反彈效果的實(shí)例
這篇文章主要介紹了 Android ScrollView實(shí)現(xiàn)反彈效果的實(shí)例的相關(guān)資料,這里自定義scrollview 并實(shí)現(xiàn)反彈效果,需要的朋友可以參考下2017-07-07
Android編程基于自定義控件實(shí)現(xiàn)時(shí)鐘功能的方法
這篇文章主要介紹了Android編程基于自定義控件實(shí)現(xiàn)時(shí)鐘功能的方法,結(jié)合實(shí)例形式詳細(xì)分析了Android自定義控件的定義及時(shí)鐘功能相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-03-03
Flutter之Timer實(shí)現(xiàn)短信驗(yàn)證碼獲取60s倒計(jì)時(shí)功能的代碼
這篇文章主要介紹了Flutter之Timer實(shí)現(xiàn)短信驗(yàn)證碼獲取60s倒計(jì)時(shí)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07

