欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android入門之onTouchEvent觸碰事件的示例詳解

 更新時間:2022年12月05日 08:50:11   作者:TGITCIC  
今天給大家?guī)淼氖荰ouchListener與OnTouchEvent的比較,以及多點觸碰的知識點!?文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

簡介

平時包括之前的例子大量是基于TouchListener如:onClick這種一類的事件。

今天給大家?guī)淼氖荰ouchListener與OnTouchEvent的比較,以及多點觸碰的知識點! TouchListener是基于監(jiān)聽的,而OnTouchEvent則是基于回調(diào)的!

因此我們通過一個小例子,來擅述同樣是觸碰事件的ouTouchEvent是什么樣的。

onTouchEvent應(yīng)用場景

onTouchEvent更多的是用于自定義的view,所有的view類中都重寫了該方法,而這種觸摸事件是基于回調(diào)的,也就是說:如果我們返回的值是false的話,那么事件會繼續(xù)向外傳播,由外面的容器或者Activity進行處理!當(dāng)然還涉及到了手勢(Gesture),這個我們會在后面進行詳細的講解!onTouchEvent其實和onTouchListener是類似的,只是處理機制不用,前者是回調(diào),后者是監(jiān)聽模式!

樣例說明

代碼示例: 定義一個簡單的view,繪制一個藍色的小圓,可以跟隨手指進行移動

實現(xiàn)代碼: 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;
    //創(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();
        //通知組件進行重繪
        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文件中如上這樣引用。此時設(shè)計器已經(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);
    }
}

哈哈哈,是一個光板。

因為所有的邏輯、觸碰事件都已經(jīng)在CircleView.java里實現(xiàn)了。

運行起來后,你的界面上就會有一個小紅圓圈,請你用鼠標(biāo)拖著這個小紅圓圈不要放到處拖,這個小紅圓圈也會跟隨著你的鼠標(biāo)到處亂跑。

自己請動一下手試試看吧。

后續(xù)

對于單指、雙指縮放等手勢,其實也很簡單,就是我們的onTouchEvent(MotionEvent event)里的這個MotionEvent,它還有額外幾個事件

  • MotionEvent.ACTION_POINTER_DOWN:當(dāng)屏幕上已經(jīng)有一個點被按住,此時再按下其他點時觸發(fā)。
  • MotionEvent.ACTION_POINTER_UP:當(dāng)屏幕上有多個點被按住,松開其中一個點時觸發(fā)(即非最后一個點被放開時)。

因此我留下一個回家作業(yè),即:在Android上實現(xiàn)以下這兩個功能讓大家去自己試試

  • 單指點擊一個圖片拖動;
  • 雙指對著一個圖片進行“縮放”,便得相應(yīng)的圖片的大小也跟著你的雙指的縮放作“伸縮”;

真心很簡單,提示:提供以下原理性代碼供你去實現(xiàn)這個小作業(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論