導航:首頁 > 操作系統 > android判斷滑動方向

android判斷滑動方向

發布時間:2024-09-28 05:19:33

android 左右滑屏怎麼實現 哪位大神教教我

代碼如下:
package kexc.scroll;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.Scroller;
/**
* 仿Launcher中的WorkSapce,可以左右滑動切換屏幕的類
*
*/
public class ScrollLayout extends ViewGroup {
/*
* onMeasure方法在控制項的父元素正要放置它的子控制項時調用。它會問一個問題,「你想要用多大地方啊?」,然後傳入兩個參數——
* widthMeasureSpec和heightMeasureSpec。它們指明控制項可獲得的空間以及關於這個空間描述的元數據。
* 比返回一個結果要好的方法是你傳遞View的高度和寬度到setMeasuredDimension方法里。
* 一個MeasureSpec包含一個尺寸和模式。
* 有三種可能的模式:
* UNSPECIFIED:父布局沒有給子布局任何限制,子布局可以任意大小。
* EXACTLY:父布局決定子布局的確切大小。不論子布局多大,它都必須限制在這個界限里。
* AT_MOST:子布局可以根據自己的大小選擇任意大小。
*/
/*
* VelocityTracker類
*
* 功能: 根據觸摸位置計算每像素的移動速率。
*
* 常用方法有:
*
* public void addMovement (MotionEvent ev) 功能:添加觸摸對象MotionEvent , 用於計算觸摸速率。
* public void computeCurrentVelocity (int units)
* 功能:以每像素units單位考核移動速率。額,其實我也不太懂,賦予值1000即可。 參照源碼 該units的意思如下: 參數 units :
* The units you would like the velocity in. A value of 1 provides pixels
* per millisecond, 1000 provides pixels per second, etc. public float
* getXVelocity () 功能:獲得X軸方向的移動速率。
*/
/*
* ViewConfiguration類
*
* 功能: 獲得一些關於timeouts(時間)、sizes(大小)、distances(距離)的標准常量值 。
*
* 常用方法:
*
* public int getScaledEdgeSlop()
*
* 說明:獲得一個觸摸移動的最小像素值。也就是說,只有超過了這個值,才代表我們該滑屏處理了。
*
* public static int getLongPressTimeout()
*
* 說明:獲得一個執行長按事件監聽(onLongClickListener)的值。也就是說,對某個View按下觸摸時,只有超過了
*
* 這個時間值在,才表示我們該對該View回調長按事件了;否則,小於這個時間點松開手指,只執行onClick監聽
*/
private static final String TAG = "ScrollLayout";
private Scroller mScroller;
private VelocityTracker mVelocityTracker;
private int mCurScreen;//當前屏幕
private int mDefaultScreen = 0;
//兩種狀態: 是否處於滑屏狀態
private static final int TOUCH_STATE_REST = 0;//靜止狀態
private static final int TOUCH_STATE_SCROLLING = 1;//滑屏狀態
private static final int SNAP_VELOCITY = 600; //最小的滑動速率
private int mTouchState = TOUCH_STATE_REST;
private int mTouchSlop;// change 多少像素算是發生move操作
private float mLastMotionX;
private float mLastMotionY;
public ScrollLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
// TODO Auto-generated constructor stub
}
public ScrollLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
mScroller = new Scroller(context);
mCurScreen = mDefaultScreen;
//初始化一個最小滑動距離
mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
}
/**
* 生成view
*/
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// TODO Auto-generated method stub
if (changed) {
int childLeft = 0;
final int childCount = getChildCount();
for (int i = 0; i < childCount; i++) {
final View childView = getChildAt(i);
if (childView.getVisibility() != View.GONE) {
final int childWidth = childView.getMeasuredWidth();
childView.layout(childLeft, 0, childLeft + childWidth,
childView.getMeasuredHeight());
childLeft += childWidth;
}
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
Log.e(TAG, "onMeasure");
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int width = MeasureSpec.getSize(widthMeasureSpec);
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
if (widthMode != MeasureSpec.EXACTLY) {
throw new IllegalStateException(
"ScrollLayout only canmCurScreen run at EXACTLY mode!");
}
final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
if (heightMode != MeasureSpec.EXACTLY) {
throw new IllegalStateException(
"ScrollLayout only can run at EXACTLY mode!");
}
// The children are given the same width and height as the scrollLayout
final int count = getChildCount();
for (int i = 0; i < count; i++) {
getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
}
// Log.e(TAG, "moving to screen "+mCurScreen);
scrollTo(mCurScreen * width, 0);
}
/**
* According to the position of current layout scroll to the destination
* page.
*/
public void snapToDestination() {
// 判斷是否超過下一屏的中間位置,如果達到就抵達下一屏,否則保持在原屏幕
// 這樣的一個簡單公式意思是:假設當前滑屏偏移值即 scrollCurX 加上每個屏幕一半的寬度,除以每個屏幕的寬度就是
// 我們目標屏所在位置了。 假如每個屏幕寬度為320dip, 我們滑到了500dip處,很顯然我們應該到達第二屏,索引值為1
// 即(500 + 320/2)/320 = 1
final int screenWidth = getWidth();
final int destScreen = (getScrollX() + screenWidth / 2) / screenWidth;
snapToScreen(destScreen);
}
public void snapToScreen(int whichScreen) {
// get the valid layout page
whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
if (getScrollX() != (whichScreen * getWidth())) {
final int delta = whichScreen * getWidth() - getScrollX();
mScroller.startScroll(getScrollX(), 0, delta, 0,
Math.abs(delta) * 5);
mCurScreen = whichScreen;
onScreenChangeListener.onScreenChange(mCurScreen);
invalidate(); // Redraw the layout
}
}
public void setToScreen(int whichScreen) {
whichScreen = Math.max(0, Math.min(whichScreen, getChildCount() - 1));
mCurScreen = whichScreen;
scrollTo(whichScreen * getWidth(), 0);
}
public int getCurScreen() {
return mCurScreen;
}
/**
* 控制view跟隨手指滑動 由父視圖調用用來請求子視圖根據偏移值 mScrollX,mScrollY重新繪制
*/
@Override
public void computeScroll() {
// 如果返回true,表示動畫還沒有結束
// 因為前面startScroll,所以只有在startScroll完成時 才會為false
if (mScroller.computeScrollOffset()) {
// 產生了動畫效果,根據當前值 每次滾動一點
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();
}
}
/*
* 其中:onInterceptTouchEvent()主要功能是控制觸摸事件的分發,例如是子視圖的點擊事件還是滑動事件。
* 其他所有處理過程均在onTouchEvent()方法里實現了。 1、屏幕的滑動要根據手指的移動而移動 ----
* 主要實現在onTouchEvent()方法中
*

㈡ Android現在的最新版本是多少有什麼優點

截止至2020年12月,最新版本為Android 11。

系統特點

Android的默認用戶界面主要基於直接操作,透過觸控鬆散地對應現實動作以作出輸入,例如滑動、點擊、捏動和反向擠壓,隨著虛擬鍵盤,以操控屏幕上的對象。游戲控制器及物理鍵盤都能透過藍牙或USB得到支持。

在回應用家的輸入方面,設計旨在提供立即流暢的觸摸界面,經常使用設備的振動功能向用戶提供觸覺反饋。內部硬體,例如是加速規、陀螺儀、距離感測器都能被某些應用程序來回應用戶的操作,例如根據設備的方向來把屏幕由縱向調整為橫向,或容許用戶透過旋轉設備,在賽車游戲中駕駛車輛。

當Android設備引導就會進入主畫面,那是設備的主要導航及信息「樞紐」,類似於個人電腦的桌面。

(2)android判斷滑動方向擴展閱讀

2020年6月11日凌晨正式推送了 Android 11 Beta 1 版系統,Android 11 Beta 1 簡化了所有智能家居設備和藍牙配件的控制。

2020年7月9日谷歌正式推送了 Android11 beta 2 更新,其中包括對系統軟體 / 開發者的多項優化。引入了「平台穩定性」的概念,其在Android11 beta 2中鼓勵開發人員開始對應用程序,SDK和庫進行「最終兼容性測試」。

2020年8月7日谷歌正式推送了 Android11 beta 3 更新,這將是最後一個測試版本呢,甚至可以看作是准正式版。Beta 3版本已經修復了此前存在的重大問題以及Bug,而且力推API 30 SDK,希望開發者們盡快完成兼容性測試。

㈢ Android 12 兼容之行為變更

Android 12 平台包含一些行為變更,這些變更可能會影響您的應用。以下行為變更將影響在 Android 12 上運行的 所有應用 ,無論採用哪種 targetSdkVersion 都不例外。您應該測試您的應用,然後根據需要進行修改,以適當地支持這些變更。

此外,請務必查看 僅影響以 Android 12 為目標平台的應用的行為變更 列表。

在搭載 Android 12 及更高版本的設備上, 滾動事件 的視覺行為發生了變化。

在 Android 11 及更低版本中,滾動事件會使視覺元素發光。在 Android 12 及更高版本中,發生拖動事件時,視覺元素會拉伸和反彈;發生快速滑動事件時,它們會快速滑動和反彈。

如需了解詳情,請參閱 動畫演示滾動手勢 指南。

如果您之前在 Android 11 或更低版本中實現了自定義啟動畫面,則需要將您的應用遷移到 SplashScreen API,以確保它從 Android 12 開始正確顯示。如果不遷移您的應用,則可能會導致應用啟動體驗變差或出乎預期。

如需了解相關說明,請參閱 將現有的啟動畫面實現遷移到 Android 12 。

此外,從 Android 12 開始,在所有應用的 冷啟動 和 溫啟動 期間,系統始終會應用新的 Android 系統默認啟動畫面 。 默認情況下,此系統默認啟動畫面由應用的啟動器圖標元素和主題的 windowBackground (如果是單色)構成。

如需了解詳情,請參閱 啟動畫面開發者指南 。

從 Android 12(API 級別 31)開始,僅當您的應用獲准處理某個通用網路 intent 中包含的特定網域時,該網路 intent 才會解析為應用中的 activity。如果您的應用未獲准處理相應的網域,則該網路 intent 會解析為用戶的默認瀏覽器應用。

應用可通過執行以下某項操作來獲准處理相應的網域:

如果您的應用調用網路 intent,不妨考慮添加一個提示或對話框,要求用戶確認操作。

Android 12 整合了現有行為,讓用戶可以 在沉浸模式下更輕松地執行手勢導航命令 。此外,Android 12 還為 粘性沉浸模式提供了向後兼容性行為 。

Android 設備有許多不同的外形規格,如大屏設備、平板電腦和可折疊設備。為了針對每種設備適當地呈現內容,您的應用需要確定屏幕或顯示屏尺寸。隨著時間的推移,Android 提供了不同的 API 來檢索這些信息。在 Android 11 中,我們引入了 WindowMetrics API 並廢棄了以下方法:

在 Android 12 中,我們繼續建議使用 WindowMetrics ,並且正在逐步廢棄以下方法:

為了緩解應用使用 Display API 檢索應用邊界的行為,Android 12 限制了 API 為不完全可調整大小的應用返回的值。這可能會對將此信息與 MediaProjection 一起使用的應用產生影響。

應用應使用 WindowMetrics API 查詢其窗口的邊界,並使用 Configuration.densityDpi 查詢當前的密度。

為了與較低的 Android 版本實現更廣泛的兼容性,您可以使用 Jetpack WindowManager 庫,它包含一個 WindowMetrics 類,該類支持 Android 4.0(API 級別 14)及更高版本。

首先,確保應用的 activity 完全可調整大小 。

activity 應依賴於來自 activity 上下文的 WindowMetrics 來執行任何與界面相關的工作,尤其是 WindowManager.getCurrentWindowMetrics() 或 Jetpack 的 WindowMetricsCalculator.computeCurrentWindowMetrics() 。

如果您的應用創建了 MediaProjection ,則必須正確地調整邊界的大小,因為投影會捕獲運行投影儀應用的顯示分區。

如果應用完全可調整大小,則 activity 上下文會返回正確的邊界,如下所示:

如果應用並非完全可調整大小,則它必須從 WindowContext 實例進行查詢,並使用 WindowManager.getMaximumWindowMetrics() 或 Jetpack 方法 WindowMetricsCalculator.computeMaximumWindowMetrics() 檢索 activity 邊界的 WindowMetrics 。

注意 :任何使用 MediaProjection 的庫也應遵循這些建議,並查詢相應的 WindowMetrics 。

Android 12 將多窗口模式作為標准行為。

在大屏設備 (sw >= 600dp) 中,所有應用都將在多窗口模式下運行,無論應用配置為何。如果 resizeableActivity="false" ,應用會在必要時進入兼容模式,以適應顯示屏尺寸。

在小屏設備 (sw < 600dp) 中,系統會檢查 activity 的 minWidth 和 minHeight ,來確定 activity 能否在多窗口模式下運行。如果 resizeableActivity="false" ,則無論最小寬度和高度如何,應用都無法在多窗口模式下運行。

如需了解詳情,請參閱 多窗口模式支持 。

相機應用通常假定設備的屏幕方向和相機預覽的寬高比呈固定關系。但是,大屏設備類型(例如可折疊設備)和顯示模式(例如多窗口和多屏幕)挑戰著這一假設。

在 Android 12 上,請求特定屏幕方向且不可調整大小 ( resizeableActivity="false" ) 的相機應用會自動進入邊襯區人像模式,從而確保相機預覽的屏幕方向和寬高比正確。在可折疊設備和其他具有相機硬體抽象層 ( HAL ) 的設備上,會對相機輸出應用額外的旋轉以補償相機感測器方向,並會剪裁相機輸出以匹配應用相機預覽的寬高比。無論設備屏幕方向如何以及設備是處於折疊狀態還是展開狀態,剪裁和額外的旋轉可確保應用正確呈現相機預覽。

除了 一些例外情況 之外,為了為短時間運行的 前台服務 提供流暢體驗,搭載 Android 12 或更高版本的設備可以將前台服務通知的顯示延遲 10 秒。此更改使某些短期任務可在顯示通知之前完成。

Android 11(API 級別 30)引入了 受限存儲分區 作為應用待機模式存儲分區。從 Android 12 開始,此存儲分區默認處於活躍狀態。在所有存儲分區中,受限存儲分區的優先順序最低(限制最高)。存儲分區按優先順序從高到低的順序排列如下:

除了使用模式之外,系統還會考慮應用的行為,以決定是否要將您的應用放在受限存儲分區中。

如果您的應用更負責地使用系統資源,就不太可能被放在受限存儲分區中。此外,如果用戶直接與您的應用互動,系統會將其放在一個限制較少的存儲分區中。

如需檢查系統是否已將您的應用放在受限存儲分區中,請調用 getAppStandbyBucket() 。如果此方法的返回值為 STANDBY_BUCKET_RESTRICTED ,則您的應用在受限存儲分區中。

如需測試您的應用在系統將其放在受限存儲分區中時的行為,您可以手動將您的應用移至該存儲分區。為此,請在終端窗口中運行以下命令:

在搭載 Android 12 或更高版本的受支持設備上,用戶可以通過按一個切換開關選項,為設備上的所有應用啟用和停用攝像頭和麥克風使用許可權。用戶可以從 快捷設置 訪問可切換的選項(如圖 1 所示),也可以從系統設置中的「隱私設置」屏幕訪問。

詳細了解這些 切換開關 以及如何檢查您的應用是否遵循了關於 CAMERA 和 RECORD_AUDIO 許可權的最佳實踐。

在搭載 Android 12 或更高版本的設備上,當應用使用麥克風或相機時,圖標會出現在狀態欄中。

詳細了解這些 指標 以及如何檢查您的應用是否遵循了關於 CAMERA 和 RECORD_AUDIO 許可權的最佳實踐。

[圖片上傳中...(image-bd519-1643780883994-1)]

<figcaption style="box-sizing: inherit; font-size: 14px; margin-top: -4px;"> 圖 1. 「快捷設置」中的麥克風和攝像頭切換開關。</figcaption>

[圖片上傳中...(image-f49bfd-1643780883994-0)]

<figcaption style="box-sizing: inherit; font-size: 14px; margin-top: -4px;"> 圖 2. 麥克風和攝像頭指示標志,顯示了最近的數據訪問。</figcaption>

在搭載 Android 12 或更高版本的設備上,根據應用對其他應用的 軟體包可見性 ,以 Android 11(API 級別 30)或更高版本為目標平台且調用以下某種方法的應用會收到一組過濾後的結果:

Android 12 移除了之前棄用的加密演算法的許多 BouncyCastle 實現,包括所有 AES 演算法。系統改用這些演算法的 Conscrypt 實現。

如果符合以下任何條件,則此變更會影響您的應用:

在 Android 12 及更高版本中,當某個應用首次調用 getPrimaryClip() 以 從另一個應用訪問剪輯數據 時,會彈出一個消息框消息,通知用戶對剪貼板的訪問。

消息框消息內的文本包含以下格式: <var translate="no" style="box-sizing: inherit; color: var(--devsite-var-color); -webkit-font-smoothing: auto; font-weight: 500;">APP</var> pasted from your clipboard.

注意 :您的應用可能會調用 getPrimaryClipDescription() 以接收有關 剪貼板上當前數據的信息 。當您的應用調用此方法時,系統不會顯示消息框消息。

在 Android 12 及更高版本中, getPrimaryClipDescription() 可以檢測到以下詳細信息:

為了加強用戶與應用和系統互動時的控制,從 Android 12 開始,棄用了 ACTION_CLOSE_SYSTEM_DIALOGS intent 操作。除了 一些特殊情況 之外,當應用嘗試 調用包含此操作的 intent 時,系統會基於應用的目標 SDK 版本執行以下操作之一:

在以下情況下,應用仍然可以在 Android 12 或更高版本上關閉系統對話框:

為了維持系統安全並保持良好的用戶體驗,Android 12 會阻止應用使用 觸摸事件 ,使用觸摸事件時疊加層會以不安全的方式遮掩應用。 換言之,系統會屏蔽穿透某些窗口的觸摸操作,但 有一些例外情況 。

此變更會影響選擇讓觸摸操作穿透其窗口的應用,例如使用 FLAG_NOT_TOUCHABLE 標志。包括但不限於以下示例:

在以下情況下,允許執行「穿透」觸摸操作:

如果系統屏蔽觸摸操作, Logcat 會記錄以下消息:

在搭載 Android 12 或更高版本的設備上,不受信任的觸摸功能默認被屏蔽。如需允許不受信任的觸摸操作,請在終端窗口中運行以下 ADB 命令 :

如需將行為還原為默認設置(不受信任的觸摸操作被屏蔽),請運行以下命令:

Android 12 更改了在按下「返回」按鈕時系統對為其任務根的啟動器 activity 的默認處理方式。在以前的版本中,系統會在按下「返回」按鈕時完成這些 activity。在 Android 12 中,現在系統會將 activity 及其任務移到後台,而不是完成 activity。當使用主屏幕按鈕或手勢從應用中導航出應用時,新行為與當前行為一致。

注意 :系統僅會將新行為應用於為其任務根的啟動器 activity,即使用 ACTION_MAIN 和 CATEGORY_LAUNCHER 聲明 intent 過濾器 的 activity。對於其他 activity,在按下「返回」按鈕時,系統會像以前一樣完成 activity。

對於大多數應用而言,此變更意味著使用「返回」按鈕退出應用的用戶可以更快地從 溫狀態 恢復應用,而不必從 冷狀態 完全重啟應用。

建議您針對此變更測試您的應用。如果您的應用目前替換 onBackPressed() 來處理返回導航並完成 Activity ,請更新您的實現來調用 super.onBackPressed() 而不是完成 Activity。調用 super.onBackPressed() 可在適當時將 activity 及其任務移至後台,並可為不同應用中的用戶提供更一致的導航體驗。

另請注意,通常,我們建議您使用 AndroidX Activity API 提供自定義返回導航 ,而不是替換 onBackPressed() 。如果沒有組件攔截系統按下「返回」按鈕,AndroidX Activity API 會自動遵循適當的系統行為。

在 Android 12 中,無論顯示屏是否支持無縫過渡到新的刷新率,都會發生使用 setFrameRate() 實現的刷新率變化;無縫過渡是指沒有任何視覺中斷,比如一兩秒鍾的黑屏。以前,如果顯示屏不支持無縫過渡,它在調用 setFrameRate() 後通常會繼續使用同一刷新率。您可以調用 getAlternativeRefreshRates() 來提前確定向新刷新率的過渡是否有可能是無縫過渡。通常,會在刷新率切換完成後調用回調 onDisplayChanged() ,但對於某些外接顯示屏,會在非無縫過渡期間調用該回調。

以下示例說明了您可以如何實現此行為:

Android 12 中添加了以下 API:

如需創建 Passpoint 建議,應用必須使用 PasspointConfiguration 、 Credential 和 HomeSp 類。這些類描述了 Wi-Fi Alliance Passpoint 規范 中定義的 Passpoint 配置文件。

如需了解詳情,請參閱 適用於互聯網連接的 Wi-Fi 建議 API 。

Android 12 包含更新後的受限制非 SDK 介面列表(基於與 Android 開發者之間的協作以及最新的內部測試)。在限制使用非 SDK 介面之前,我們會盡可能確保有可用的公開替代方案。

如果您的應用並非以 Android 12 為目標平台,其中一些變更可能不會立即對您產生影響。然而,雖然您目前仍可以使用一些非 SDK 介面( 具體取決於應用的目標 API 級別 ),但只要您使用任何非 SDK 方法或欄位,終歸存在導致應用出問題的顯著風險。

如果您不確定自己的應用是否使用了非 SDK 介面,則可以 測試您的應用 來進行確認。如果您的應用依賴於非 SDK 介面,您應該開始計劃遷移到 SDK 替代方案。然而,我們知道某些應用具有使用非 SDK 介面的有效用例。如果您無法為應用中的某項功能找到使用非 SDK 介面的替代方案,應 請求新的公共 API 。

如需詳細了解此 Android 版本中的變更,請參閱 Android 12 中有關限制非 SDK 介面的更新 。如需全面了解有關非 SDK 介面的詳細信息,請參閱 對非 SDK 介面的限制 。

㈣ android GridView 如何設置為左右可滾動

GridView不支持左右滾動。

左右滾動的需求可考慮:

  1. 在外層加一個HorizontalScrollView, 不過這種滑動體驗並不好,上下左右均可滑動,如果是斜著滑的時候,體驗差。當然,如果你會自定義HorizontalScrollView把滑動區分為斜著上下滑和斜著左右滑,再把斜著上下滑的事件傳遞給子View也是可以的。

  2. 可以考慮Viewpager里載入多個GridView,這樣GridView就可以一頁一頁的滑

㈤ 移動端touch觸屏滑動事件、滑動觸屏事件監聽!

一、觸摸事件

ontouchstart、ontouchmove、ontouchend、ontouchcancel

目前移動端瀏覽器均支持這4個觸摸事件,包括IE。由於觸屏也支持MouseEvent,因此他們的順序是需要注意的:touchstart → mouseover → mousemove → mousedown → mouseup → click1

Apple在iOS 2.0中引入了 觸摸事件API ,Android正迎頭趕上這一事實標准,縮小差距。最近一個W3C工作組正合力制定這一 觸摸事件規范 。

二、規范

這里我們介紹幾種普及得比較好的觸摸事件,你可以在絕大多數現代瀏覽器中來測試這一事件(必須是觸屏設備哦):

touchstart: 觸摸開始的時候觸發

touchmove: 手指在屏幕上滑動的時候觸發

touchend: 觸摸結束的時候觸發

而每個觸摸事件都包括了三個觸摸列表,每個列表裡包含了對應的一系列觸摸點(用來實現多點觸控):

touches: 當前位於屏幕上的所有手指的列表。

targetTouches: 位於當前DOM元素上手指的列表。

changedTouches: 涉及當前事件手指的列表。

每個觸摸點由包含了如下觸摸信息(常用):

identifier: 一個數值,唯一標識觸摸會話(touch session)中的當前手指。一般為從0開始的流水號(android4.1,uc)

target: DOM元素,是動作所針對的目標。

pageX / pageX / clientX / clientY/screenX/screenY : 一個數值,動作在屏幕上發生的位置(page包含滾動距離,client不包含滾動距離,screen則以屏幕為基準)。

radiusX / radiusY/ rotationAngle: 畫出大約相當於手指形狀的橢圓形,分別為橢圓形的兩個半徑和旋轉角度。初步測試瀏覽器不支持,好在功能不常用,歡迎大家反饋。

有了這些信息,我們就可以依據這些事件信息為用戶提供不同的反饋了。

下面,我將為大家展示一個小demo,用touchmove實現的單指拖動:

三、手勢事件
手勢是指利用多點觸控進行旋轉、拉伸等操作,例如圖片、網頁的放大、旋轉。需要兩個或以上的手指同時觸摸時才會觸發手勢事件。關於縮放我們需要注意的一點 是元素的位置坐標:我們通常使用offsetX、getBoundingClientRect等方法獲取元素的位置坐標,但在手機瀏覽器中頁面經常會在使 用中被縮放,那縮放後的元素坐標會改變嗎?答案是有所差異。用一個情景來說明這個問題:頁面A載入完成後, JavaScript 獲 取到該元素在document中的坐標為(100,100),接著用戶放大了頁面,此時用JavaScript再次輸出元素坐標,依然還是 (100,100),但該元素在屏幕上的響應區域會根據縮放比例產生偏移。你可以打開那個打磚塊游戲demo,等頁面完全載入完成後,再放大,此時你會發 現即使手指觸摸在「touch here」區域外部,也可以控制到球板,因為區域發生了偏移。除非頁面刷新或者恢復縮放,否則偏移量將一直存在。

四、重力感應

重力感應較簡單,只需要為body節點添加onorientationchange事件即可。在此事件中由window.orientation屬性得到代表當前手機方向的數值。window.orientation的值列表如下:
0:與頁面首次載入時的方向一致
-90:相對原始方向順時針轉了90°
180:轉了180°
90:逆時針轉了90°據我測試,Android2.1尚未支持重力感應。以上即目前的觸屏事件,這些事件尚未並入標准,但已被廣泛使用。本人Android2.1,未在其他環境下測試。

閱讀全文

與android判斷滑動方向相關的資料

熱點內容
andlua畫質助手源碼 瀏覽:575
winrar解壓格式怎麼看 瀏覽:144
qt編程入門pdf 瀏覽:597
php中是根據指針查的數據嗎 瀏覽:273
安卓手機驅動為什麼不能提取通用 瀏覽:706
轉行程序員失敗的人 瀏覽:726
延遲命令方塊 瀏覽:495
某視頻網站為什麼安卓可以投屏 瀏覽:649
伺服器解釋器在哪個文件夾 瀏覽:93
app督促服務在哪裡 瀏覽:990
命令與征服3語音 瀏覽:997
用紙片和怎麼才能做一個解壓球 瀏覽:474
vim顯示命令 瀏覽:292
程序員給老婆送手機 瀏覽:82
胖子程序員視頻 瀏覽:140
手機閩政通app下載在哪裡 瀏覽:112
摩托車發動機壓縮機 瀏覽:694
phpwinexe 瀏覽:756
如何拿自己的電腦做伺服器 瀏覽:709
go演算法實現 瀏覽:774