用戶輸入 i. 檢測常用手勢(一)

来源:http://www.cnblogs.com/520-1314/archive/2016/01/22/5150557.html
-Advertisement-
Play Games

參考:http://blog.csdn.net/qq418716640/article/details/8508973http://www.cnblogs.com/mengdd/p/3335508.html效果:一個手指實現(所有手勢事件)和(部分事件的);A. 所有手勢activity_main....


參考:

http://blog.csdn.net/qq418716640/article/details/8508973
http://www.cnblogs.com/mengdd/p/3335508.html

效果:一個手指實現(所有手勢事件)和(部分事件的);

A. 所有手勢

activity_main.xml

<TextView
android:id="@+id/gesture"
android:layout_width="match_parent"
android:layout_height="150dp"
android:gravity="center"
android:text="單擊手勢變化" />


<TextView
android:id="@+id/doubleTap"
android:layout_width="match_parent"
android:layout_height="150dp"
android:gravity="center"
android:text="雙擊手勢變化" />

 

MainActivity.java

public class MainActivity extends Activity {

private static final String LOG_TAG = "HelloGesture";
private GestureDetector mGestureDetector = null;
private TextView mGestureTextView = null;
private TextView mDoubleTapTextView = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGestureTextView = (TextView) findViewById(R.id.gesture);
mDoubleTapTextView = (TextView) findViewById(R.id.doubleTap);
// 構造GestureDetector對象,傳入監聽器對象
mGestureDetector = new GestureDetector(this, mOnGestureListener);
// 傳入雙擊監聽器對象
mGestureDetector.setOnDoubleTapListener(mDoubleTapListener);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
// 在onTouchEvent方法中將事件傳遞給手勢檢測對象,否則手勢監聽對象中的回調函數是不會被調用的
mGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}

private OnGestureListener mOnGestureListener = new OnGestureListener() {

@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.i(LOG_TAG, "onSingleTapUp: " + e.toString());
mGestureTextView.setText("onSingleTapUp: ");
return false;

}

@Override
public void onShowPress(MotionEvent e) {
Log.i(LOG_TAG, "onShowPress: " + e.toString());
mGestureTextView.setText("onShowPress: ");
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
Log.i(LOG_TAG, "onScroll: " + e1.toString() + ", " + e2.toString());
mGestureTextView.setText("onScroll ");
return false;
}

@Override
public void onLongPress(MotionEvent e) {
Log.i(LOG_TAG, "onLongPress: " + e.toString());
mGestureTextView.setText("onLongPress: ");
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.i(LOG_TAG, "onFling: " + e1.toString() + ", " + e2.toString());
mGestureTextView.setText("onFling ");
return false;
}

@Override
public boolean onDown(MotionEvent e) {

Log.i(LOG_TAG, "onDown: " + e.toString());
mGestureTextView.setText("onDown: ");

return false;

}
};
private OnDoubleTapListener mDoubleTapListener = new OnDoubleTapListener() {

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.i("LOG_TAG", "onSingleTapConfirmed: " + e.toString());
mDoubleTapTextView.setText("onSingleTapConfirmed: ");
return false;
}

@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.i("LOG_TAG", "onDoubleTapEvent: " + e.toString());
mDoubleTapTextView.setText("onDoubleTapEvent: ");
return false;
}

@Override
public boolean onDoubleTap(MotionEvent e) {
Log.i("LOG_TAG", "onDoubleTap: " + e.toString());
mDoubleTapTextView.setText("onDoubleTap: ");
return false;
}
};
}


 

B. 部分手勢

如果你僅僅只想處理幾種手勢,你可以選擇繼承GestureDetector.SimpleOnGestureListener類,而不是實現
GestureDetector.OnGestureListener介面

MainActivity.java


public class MainActivity extends Activity {


private GestureDetector mGestureDetector = null;
private TextView mGestureTextView = null;
private TextView mDoubleTapTextView = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGestureTextView = (TextView) findViewById(R.id.gesture);
mDoubleTapTextView = (TextView) findViewById(R.id.doubleTap);
// 構造GestureDetector對象,傳入監聽器對象
mGestureDetector = new GestureDetector(this, new MyGestureListener());
// 傳入雙擊監聽器對象


}

@Override
public boolean onTouchEvent(MotionEvent event) {
// 在onTouchEvent方法中將事件傳遞給手勢檢測對象,否則手勢監聽對象中的回調函數是不會被調用的
this.mGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
private static final String DEBUG_TAG = "Gestures";

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.d(DEBUG_TAG, "onFling: " + e1.toString() + ", " + e2.toString());
mGestureTextView.setText("onFling ");
return false;
}

@Override
public boolean onDown(MotionEvent e) {
Log.d(DEBUG_TAG, "onDown: " + e.toString());
mGestureTextView.setText("onDown: ");
return false;

}
}

}


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Genymotion 安卓模擬器確實比安卓原生的模擬器快,但是除了快就找不到其他優點了...曾經嘗試在VM虛擬機內的Ubuntu系統裡面再運行Genymotion的,主要原因是要翻牆去下載一些東西,又不想完全連到vpn上,不過最後的結果是雙重夢境失敗,具體原因不是很清楚,提示是不能虛擬化(也許是技術...
  • 問題描述:Gradle version 2.10 is required. Current version is 2.8.Gradle版本由2.8升為2.10後,發現所有依賴play-services的module都無法構建了,提示如下錯誤:java.io.FileNotFoundException...
  • 前言 市面上絕大部分的APP被打開之後映入眼帘的都是一個美輪美奐的輪播器,所以能做出一個符合需求、高效的輪播器成為了一個程式員的必備技能。所以今天的這篇博客就來談談輪播器這個看似簡單的控制項其中蘊含的道理。正文 首先我們來分析一下該如何去實現一個類似下圖的輪播器(圖片數量、URL由伺服器返...
  • jsonkit通過Dictionary轉換成JSON字元串時總是崩潰。解析代碼:崩潰地點分析是因為我的參數中全是數字找了一下原因,不知道知道怎麼設置,(求大神指點)這裡有一個折中辦法使用 NSJSONSerialization 進行序列化
  • Android實現自定義對話框效果:核心代碼:package com.example.diydialog;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import androi...
  • 通常代理的使用需要以下幾個步驟: 1、制定協議。協議可以在委托對象的.h中聲明,也可以在單獨的.h中聲明。制定協議後,在協議中聲明需要代理對象來實現的方法。 2、設置代理屬性。制定協議後需要為委托對象設置一個代理屬性,代理屬性的作用是存儲委托對象的代理對象。具體格式如下:@property (no....
  • 菜單滾動視圖也是在項目開發過程中比較常用到的功能,先直接看效果圖實現的效果如下:當菜單個數的總長度超過一個屏寬度就計算每一個的文字寬度,若沒有則只進行一個屏平分,點擊菜單項時,滾動的視圖位置會隨著調整;下麵將會把代碼貼出來;1:控制器.h文件的內容//// myScrollerViewContro....
  • 一,效果圖。二,工程圖。三,代碼。RootViewController.h#import @interface RootViewController : UIViewController{ UIScrollView *scoreView;}@endRootViewController.m#im...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...