網站首頁 編程語言 正文
簡介
平時包括之前的例子大量是基于TouchListener如:onClick這種一類的事件。
今天給大家帶來的是TouchListener與OnTouchEvent的比較,以及多點觸碰的知識點! TouchListener是基于監聽的,而OnTouchEvent則是基于回調的!
因此我們通過一個小例子,來擅述同樣是觸碰事件的ouTouchEvent是什么樣的。
onTouchEvent應用場景
onTouchEvent更多的是用于自定義的view,所有的view類中都重寫了該方法,而這種觸摸事件是基于回調的,也就是說:如果我們返回的值是false的話,那么事件會繼續向外傳播,由外面的容器或者Activity進行處理!當然還涉及到了手勢(Gesture),這個我們會在后面進行詳細的講解!onTouchEvent其實和onTouchListener是類似的,只是處理機制不用,前者是回調,后者是監聽模式!
樣例說明
代碼示例: 定義一個簡單的view,繪制一個藍色的小圓,可以跟隨手指進行移動
實現代碼: CircleView.java。
全代碼
前端
CircleView.java
對,你沒看錯!
這個不是.xml文件。它長下面這個樣
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;
//創建畫筆
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();
//通知組件進行重繪
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>
我們把這個java在activity_main.xml文件中如上這樣引用。此時設計器已經顯示出來效果了。
后端
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);
}
}
哈哈哈,是一個光板。
因為所有的邏輯、觸碰事件都已經在CircleView.java里實現了。
運行起來后,你的界面上就會有一個小紅圓圈,請你用鼠標拖著這個小紅圓圈不要放到處拖,這個小紅圓圈也會跟隨著你的鼠標到處亂跑。
自己請動一下手試試看吧。
后續
對于單指、雙指縮放等手勢,其實也很簡單,就是我們的onTouchEvent(MotionEvent event)里的這個MotionEvent,它還有額外幾個事件
- MotionEvent.ACTION_POINTER_DOWN:當屏幕上已經有一個點被按住,此時再按下其他點時觸發。
- MotionEvent.ACTION_POINTER_UP:當屏幕上有多個點被按住,松開其中一個點時觸發(即非最后一個點被放開時)。
因此我留下一個回家作業,即:在Android上實現以下這兩個功能讓大家去自己試試
- 單指點擊一個圖片拖動;
- 雙指對著一個圖片進行“縮放”,便得相應的圖片的大小也跟著你的雙指的縮放作“伸縮”;
真心很簡單,提示:提供以下原理性代碼供你去實現這個小作業。
switch (event.getAction() & MotionEvent.ACTION_MASK) {
// 單指
case MotionEvent.ACTION_DOWN:
break;
// 雙指
case MotionEvent.ACTION_POINTER_DOWN:
原文鏈接:https://blog.csdn.net/lifetragedy/article/details/128174066
相關推薦
- 2022-09-04 Golang?實現?RTP音視頻傳輸示例詳解_Golang
- 2023-05-20 Python優化算法之遺傳算法案例代碼_python
- 2022-07-13 Golang實現常見排序算法的示例代碼_Golang
- 2022-05-28 C#調用WebService的方法介紹_C#教程
- 2022-07-27 Python中的pandas表格模塊、文件模塊和數據庫模塊_python
- 2022-07-15 Android視頻加水印之FFmpeg的簡單應用實例_Android
- 2022-10-03 Android使用AudioRecord實現錄音功能_Android
- 2023-01-20 python如何實現完全數_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支