Activity滑动事件

玩微博的时候发现一个功能,就是点击微博列表进入详细页,在详细页滑动页面就可以返回到上页,个人体验过后感觉还不错,于是查了下资料完成了这个功能。

package com.monsou.KinderGartenMonsou;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import com.monsou.KinderGartenMonsou.publicmethod.DahnfoodApplication;
import com.monsou.KinderGartenMonsou.publicmethod.ShowProcessDialog;

public class ShowProductActivity extends Activity implements OnTouchListener,
		OnGestureListener {
	private WebView main_webview;
	ProgressDialog myDialog;
	ImageView goback_btn;
	TextView textView1;
	GestureDetector mGestureDetector;
	private static final int FLING_MIN_DISTANCE = 50;
	private static final int FLING_MIN_VELOCITY = 0;
	LinearLayout ll;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.show_product);
		DahnfoodApplication sysApplication = (DahnfoodApplication) this
				.getApplication();
		sysApplication.getInstance().addActivity(this);
		ll = (LinearLayout) findViewById(R.id.ll);
		ll.setOnTouchListener(this);
		ll.setLongClickable(true);
		mGestureDetector = new GestureDetector(this);
		mGestureDetector = new GestureDetector(ShowProductActivity.this);
		textView1 = (TextView) findViewById(R.id.textView1);
		String text = getIntent().getStringExtra("NAME");
		textView1.setText(text);
		goback_btn = (ImageView) findViewById(R.id.goback_btn);
		goback_btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				finish();
			}
		});
		main_webview = (WebView) this.findViewById(R.id.main_webview);
		main_webview.setOnTouchListener(this);
		main_webview.setWebViewClient(new WebViewClient() {
			@Override
			public void onPageFinished(WebView view, String url) {
				ShowProcessDialog.mDialog.dismiss();
			}
		});

		String push_url = getIntent().getStringExtra("url");
		loadUrl(push_url);
		// Android中Webview自适应屏幕
		main_webview.getSettings().setUseWideViewPort(true);
		main_webview.getSettings().setLoadWithOverviewMode(true);
		WebSettings webSettings = main_webview.getSettings(); // webView:
																// 类WebView的实例

		webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
	}

	public void loadUrl(String url) {
		if (main_webview != null) {
			main_webview.loadUrl(url);
			// myDialog = ProgressDialog.show(this, null, "页面加载中,请稍后..");
			ShowProcessDialog.showRoundProcessDialog(ShowProductActivity.this,
					R.layout.loading_process_dialog_anim, true, false);
			// 以下设置可以让屏幕不变暗
			Window window = ShowProcessDialog.mDialog.getWindow();
			WindowManager.LayoutParams lp = window.getAttributes();
			lp.dimAmount = 0f;
			window.setAttributes(lp);
			main_webview.reload();
		}
	}

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

	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
				&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
			// Fling left
			Toast.makeText(this, "向左手势", Toast.LENGTH_SHORT).show();

		} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
				&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
			// Fling right
			finish();
			overridePendingTransition(R.anim.push_left_in, R.anim.push_left_out);
			Toast.makeText(this, "向右手势", Toast.LENGTH_SHORT).show();
		}
		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;
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		Log.i("touch", "touch");
		return mGestureDetector.onTouchEvent(event);
	}
}
原文地址:https://www.cnblogs.com/yangcong/p/3449572.html