網(wǎng)站首頁 編程語言 正文
簡介
平時(shí)包括之前的例子大量是基于TouchListener如:onClick這種一類的事件。
今天給大家?guī)淼氖荰ouchListener與OnTouchEvent的比較,以及多點(diǎn)觸碰的知識點(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
對,你沒看錯(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è)小紅圓圈,請你用鼠標(biāo)拖著這個(gè)小紅圓圈不要放到處拖,這個(gè)小紅圓圈也會(huì)跟隨著你的鼠標(biāo)到處亂跑。
自己請動(dòng)一下手試試看吧。
后續(xù)
對于單指、雙指縮放等手勢,其實(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);
- 雙指對著一個(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:
原文鏈接:https://blog.csdn.net/lifetragedy/article/details/128174066
相關(guān)推薦
- 2022-07-06 C語言for循環(huán)嵌套for循環(huán)在實(shí)踐題目中應(yīng)用詳解_C 語言
- 2022-05-28 C語言結(jié)構(gòu)體詳細(xì)圖解分析_C 語言
- 2022-08-19 python項(xiàng)目中requirements.txt的用法實(shí)例教程_python
- 2022-07-10 Linux安裝及管理程序
- 2022-11-20 使用Docker部署openGauss國產(chǎn)數(shù)據(jù)庫的操作方法_docker
- 2023-06-20 React?DOM-diff?節(jié)點(diǎn)源碼解析_React
- 2022-08-03 sql注入報(bào)錯(cuò)之注入原理實(shí)例解析_數(shù)據(jù)庫其它
- 2023-02-03 Linux設(shè)置每晚定時(shí)備份Oracle數(shù)據(jù)表的操作命令_linux shell
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支