问题:试过论坛里的翻页方法,但是当页面时WebView控件时,翻页就无效了。感觉好像事件被WebView给截去了。
哪位高手给说说该如何做呀?
注:想实现如下功能ViewFlipper里面添加三个WebView,通过手势来切换。
方案:
自己新建一个继承WebView,比如MyWebView.重写他的onTouchEvent方法。晚上很多例子。你搜索一下。
public class MyWebView extends WebView {
float downXValue;
long downTime;
private ViewFlipper flipper;
private float lastTouchX, lastTouchY;
private boolean hasMoved = false;
public MyWebView(Context context, ViewFlipper flipper) {
super(context);
this.flipper = flipper;
}
@Override
public boolean onTouchEvent(MotionEvent evt) {
boolean consumed = super.onTouchEvent(evt);
if (isClickable()) {
switch (evt.getAction()) {
case MotionEvent.ACTION_DOWN:
lastTouchX = evt.getX();
lastTouchY = evt.getY();
downXValue = evt.getX();
downTime = evt.getEventTime();
hasMoved = false;
break;
case MotionEvent.ACTION_MOVE:
hasMoved = moved(evt);
break;
case MotionEvent.ACTION_UP:
float currentX = evt.getX();
long currentTime = evt.getEventTime();
float difference = Math.abs(downXValue - currentX);
long time = currentTime - downTime;
Log.i("Touch Event:", "Distance: " + difference + "px Time: "
+ time + "ms");
/** X轴滑动距离大于100,并且时间小于220ms,并且向X轴右方向滑动 && (time < 220) */
if ((downXValue < currentX) && (difference > 100 && (time < 220))) {
/** 跳到上一页 */
this.flipper.setInAnimation(AnimationUtils.loadAnimation(
this.getContext(), R.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(
this.getContext(), R.anim.push_right_out));
flipper.showPrevious();
}
/** X轴滑动距离大于100,并且时间小于220ms,并且向X轴左方向滑动 */
if ((downXValue > currentX) && (difference > 100) && (time < 220)) {
/** 跳到下一页 */
this.flipper.setInAnimation(AnimationUtils.loadAnimation(
this.getContext(), R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(
this.getContext(), R.anim.push_left_out));
flipper.showNext();
}
break;
}
}
return consumed || isClickable();
}
private boolean moved(MotionEvent evt) {
return hasMoved || Math.abs(evt.getX() - lastTouchX) > 10.0
|| Math.abs(evt.getY() - lastTouchY) > 10.0;
}
}
动画的XML搜索一下,晚上都有的