ViewFlipper中的WebView屏蔽手势动作的解决方法

摘自:http://www.eoeandroid.com/thread-65821-1-1.html

定义一个MyWebView类继承WebView

MyWebView.java

package com.test;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.view.animation.AnimationUtils;
import android.webkit.WebView;
import android.widget.ViewFlipper;

public class MyWebView extends WebView {

	float downXValue;
	long downTime;
	private ViewFlipper flipper;

	private float lastTouchX, lastTouchY;
	private boolean hasMoved = false;
	private Activity context;
	private String[] title = new String[]{"直播", "点播", "浏览器"};
	
	public MyWebView(Context context, ViewFlipper flipper) {
		super(context);
		this.context = (Activity) context;
		this.flipper = flipper;
		this.loadUrl("http://www.baidu.com");
	}

	public boolean onTouchEvent(MotionEvent evt) {

		boolean consumed = super.onTouchEvent(evt);
		if (isClickable()) {
			switch (evt.getAction()) {
			case MotionEvent.ACTION_DOWN:
				Log.d("lxy", "browser ---> down envent");
				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.layout.right_in));
					this.flipper.setOutAnimation(AnimationUtils.loadAnimation(
							this.getContext(), R.layout.right_out));

					flipper.showPrevious();
					Log.d("lxy", "getDisplayedChild() = " + flipper.getDisplayedChild());
					
					context.setTitle(title[flipper.getDisplayedChild()]);
				}
				/** X轴滑动距离大于100,并且时间小于220ms,并且向X轴左方向滑动 */
				if ((downXValue > currentX) && (difference > 100)
						&& (time < 220)) {
					/** 跳到下一页 */
					this.flipper.setInAnimation(AnimationUtils.loadAnimation(
							this.getContext(), R.layout.left_in));
					this.flipper.setOutAnimation(AnimationUtils.loadAnimation(
							this.getContext(), R.layout.left_out));
					flipper.showNext();
					Log.d("lxy", "getDisplayedChild() = " + flipper.getDisplayedChild());
					context.setTitle(title[flipper.getDisplayedChild()]);
				}

				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;
	}

}

 

ViewFlipper的相关代码

SignFlipDemo.java

package com.test;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.animation.AnimationUtils;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class SignFlipDemo extends Activity implements OnGestureListener {
	
	/** Called when the activity is first created. */
	private static ViewFlipper flipper;
	private GestureDetector detector;
	private String[] title = new String[]{"点播", "直播", "浏览器"};

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		detector = new GestureDetector(this);//  分析用户动作
		flipper = new ViewFlipper(this);
		flipper.setBackgroundColor(Color.WHITE);
		flipper.addView(addTextView("step 1", 0));//
		flipper.addView(addTextView("step 2", 1));
		flipper.addView(addTextView("step 3", 2));
		setContentView(flipper);
		setTitle("title[0]");
	}

	private View addTextView(String text, int i) {
		TextView tv = new TextView(this);
		tv.setText(text);
		tv.setGravity(1);
		Drawable dabg;
		switch (i) {
		case 0:
			dabg = this.getResources().getDrawable(R.drawable.videocolumn);
			tv.setBackgroundDrawable(dabg);
			return tv;
		
		case 1:
			dabg = this.getResources().getDrawable(R.drawable.playback);
			tv.setBackgroundDrawable(dabg);
			return tv;
			
		case 2:
			MyWebView webView = new MyWebView(this, flipper);
			return webView;
		}
		return null;
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		return this.detector.onTouchEvent(event);
	}

	@Override
	public boolean onDown(MotionEvent e) {
		return false;
	}

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (e1.getX() - e2.getX() > 60) {
			Log.i("lxy", "---> Fling to left");
			this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
					R.layout.left_in));
			this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
					R.layout.left_out));
			this.flipper.showNext();
			Log.d("lxy", "getDisplayedChild() = " + flipper.getDisplayedChild());
			this.setTitle(title[flipper.getDisplayedChild()]);
			return true;
		} else if (e1.getX() - e2.getX() < -60) {
			Log.i("lxy", "---> Fling to right");
			this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
					R.layout.right_in));
			this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
					R.layout.right_out));
			this.flipper.showPrevious();
			Log.d("lxy", "getDisplayedChild() = " + flipper.getDisplayedChild());
			this.setTitle(title[flipper.getDisplayedChild()]);
			return true;
		}
		return false;
	}

	@Override
	public void onLongPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void onShowPress(MotionEvent e) {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}
}



 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值