我正在使用來自Mohan的答案DoubleTap in android但我不知道如何實現它。雙擊在Android中刷卡?
我有一個webView,我想檢測從左,右滑動和雙擊。我怎麼能一次執行兩個。請幫助我是手勢新手。
我正在使用來自Mohan的答案DoubleTap in android但我不知道如何實現它。雙擊在Android中刷卡?
我有一個webView,我想檢測從左,右滑動和雙擊。我怎麼能一次執行兩個。請幫助我是手勢新手。
試試這個,
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
MyGestureDetector
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//你的代碼
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//你的代碼
}
} catch (Exception e) {
Log.e(LOG_TAG, "onFling", e);
}
return false;
}
}
通過檢查滑動距離,您可以區分觸摸並以某種方式輕掃。我希望這能幫到您。
這是一個處理自己手勢的擴展WebView。這可能會幫助那些發現外部UI區域正在吸收手勢並且難以讓聽衆進入的人。這是我的問題。這裏是檢測自身所有的滑動和雙whatsits web視圖:
package org.this_voice.modabrowser;
import android.content.Context;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.webkit.WebView;
import android.widget.Toast;
public class MoDaView extends WebView implements
GestureDetector.OnDoubleTapListener {
Context mContext;
GestureDetector gestureDetector = new GestureDetector(
new mGestureDetector());
public MoDaView(Context context) {
super(context);
mContext = context;
gestureDetector.setOnDoubleTapListener(this);
gestureDetector.setIsLongpressEnabled(true);
}
public MoDaView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mContext = context;
gestureDetector.setOnDoubleTapListener(this);
gestureDetector.setIsLongpressEnabled(true);
}
public MoDaView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
gestureDetector.setOnDoubleTapListener(this);
gestureDetector.setIsLongpressEnabled(true);
}
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
class mGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(mContext, "Left Swipe", Toast.LENGTH_SHORT)
.show();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(mContext, "Right Swipe", Toast.LENGTH_SHORT)
.show();
}
} catch (Exception e) {
// nothing
}
return false;
}
}
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event) || super.onTouchEvent(event);
}
@Override
public boolean onDoubleTap(MotionEvent event) {
Toast.makeText(mContext, "onDoubleTap", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent event) {
Toast.makeText(mContext, "onDoubleTapEvent", Toast.LENGTH_SHORT).show();
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
Toast.makeText(mContext, "onSingleTapConfirmed", Toast.LENGTH_SHORT)
.show();
return true;
}
}
,這裏是在課堂上使用擴展的WebView的設置:
wv = (MoDaView) findViewById(R.id.webview);
wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
WebSettings wvOptions = wv.getSettings();
wvOptions.setJavaScriptEnabled(true);
wvOptions.setGeolocationEnabled(false);
wvOptions.setBuiltInZoomControls(true);
wvOptions.setUseWideViewPort(true);
這是檢測的所有手勢以上。我應該補充說這個類結合了來自stackoverflow的大約6個不同的答案。
還有一件事,爲了拯救人們我所經歷的。雙擊不是雙指敲擊。我認爲這是(長話短說,我們會跳過它)。一個雙手快一個手指兩次。而且雙指同時是兩個 - 這就是我提到它的原因 - 並非所有手機都能檢測到它。我打算使用它,但現在我將使用實際的雙擊。 Android有兩個類來「僞造」雙指手勢,但他們說這些類不能在任何地方工作。僅供參考。
Thanx幫助! – Navdroid 2012-03-20 09:53:39