Rob*_*way 12 sdk android webview gesture
我有一个webview控件,需要支持Android中的fling手势才能显示新记录(加载新数据).这是在扩展Activity的类中发生的.我见过的所有示例都展示了如何为textview实现手势支持,但对于webview却没有.
我需要对左右翼进行不同的动作.任何代码帮助将不胜感激,因为这完全让我难过.
这是我基本的onCreate和我的课程
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.os.Bundle;
import android.text.Html;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.webkit.WebView;
public class ArticleActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window w = getWindow();
w.requestFeature(Window.FEATURE_LEFT_ICON);
WebView webview = new WebView(this);
setContentView(webview);
w.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,
R.drawable.gq);
setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
populateFields();
webview.loadData(question + answer, "text/html", "utf-8");
//
}
private void populateFields() {
....
}
}
Run Code Online (Sandbox Code Playgroud)
tec*_*ces 12
创建一个GestureListener和一个GestureDetector.通过覆盖webview的onTouchEvent来调用GestureDetector.onTouchEvent.
您也可以直接覆盖Activity onTouchEvent btw.如果需要,我可以发布一些代码.
编辑:代码按要求.
public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyWebView webview = new MyWebView(this);
setContentView(webview);
}
class MyWebView extends WebView {
Context context;
GestureDetector gd;
public MyWebView(Context context) {
super(context);
this.context = context;
gd = new GestureDetector(context, sogl);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return gd.onTouchEvent(event);
}
GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
public boolean onDown(MotionEvent event) {
return true;
}
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
if (event1.getRawX() > event2.getRawX()) {
show_toast("swipe left");
} else {
show_toast("swipe right");
}
return true;
}
};
void show_toast(final String text) {
Toast t = Toast.makeText(context, text, Toast.LENGTH_SHORT);
t.show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
@littleFluffyKitty.我默认设置WebView触摸事件,当你调出缩放控件等时?我没有测试过.我发现实现自己的手势检测效果最好(不确定它是否最适合WebView).您需要将触摸事件视为三个不同的组件.按下,移动(如果有的话)和按下按钮,按下,移动,释放总是发生.
如果你在onDown上返回false,那么动作应该传递给WebView触摸事件处理程序但是iirc它会停止传递给GestureDetector的后续事件.这是我实现自己的基于Android源的一半原因.iirc我从索尼爱立信教程中得到了这个想法,可以从市场上下载.这是显示代码的3D列表,非常容易适应.
我更新了代码,如果用户没有使用,现在可以调用本机事件处理程序
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.webkit.WebView;
public class MyWebView extends WebView {
private boolean flinged;
private static final int SWIPE_MIN_DISTANCE = 320;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
public MyWebView(Context context, AttributeSet attrs) {
super(context, attrs);
gd = new GestureDetector(context, sogl);
}
GestureDetector gd;
@Override
public boolean onTouchEvent(MotionEvent event) {
gd.onTouchEvent(event);
if (flinged) {
flinged = false;
return true;
} else {
return super.onTouchEvent(event);
}
}
GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener() {
// your fling code here
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) {
if (event1.getX() < 1200 && event1.getX() > 80) {
return false;
}
if (Math.abs(event1.getY() - event1.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if(event1.getX() - event2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
loadUrl("javascript:changePage('LEFT')");
Log.i("Swiped","swipe left");
flinged = true;
} else if (event2.getX() - event1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
loadUrl("javascript:changePage('RIGHT')");
Log.i("Swiped","swipe right");
flinged = true;
}
return true;
}
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14555 次 |
| 最近记录: |