写作缘由:最近在做左右滑动翻页效果,代码写出来经过3天调试毫无进展,经过网上多次搜索和自己亲自实现,在这里写个总结供自己学习也为大家提供个方便,避免以后大家走弯路,由于我写的项目比较繁琐,就不自己写Demo,直接转载一篇,只是提醒其中自己遇到的坑
提示01: 网上都说要触发onScroll和onFling,必须让监听器的onDown的返回值设为true,本人测试false也可,目前没问题!所以没有实现翻页不要纠结再次处!
提示02: 我加载的是webview页面,所以这里必须要注意:一般我们用于接收GestureDetector对象的方法是OnTouchevent();,而在View组件占用了屏幕空间之后,这个方法就无效了,只有换成 dispatchTouchEvent方法才有效!这个方法贴个代码解释:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) { //注意这里不能用ONTOUCHEVENT方法,不然无效的
Toast.makeText(NewsContent.this, "jinru", 1).show();
detector.onTouchEvent(ev);
webview.onTouchEvent(ev);//这几行代码也要执行,将webview载入MotionEvent对象一下,这块加载webview必须加
return super.dispatchTouchEvent(ev);
}
提示03: 下来就是贴代码了,代码和网上几乎相同这个(提示02的方法必须加到代码中!!!!)我是菜鸟不喜勿喷,也欢迎大神指点!
转载代码来自:转载于此,点击链接
- import com.stone.R;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.GestureDetector;
- import android.view.GestureDetector.OnGestureListener;
- import android.view.MotionEvent;
- import android.widget.ViewFlipper;
- //ViewFlipper 和手势 左右滑动 切换 Activity
- public class Gesture extends Activity implements OnGestureListener{
- ViewFlipper flipper; //一次显示一个子view
- GestureDetector detector; //手势监测器
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- detector = new GestureDetector(this);
- setContentView(R.layout.flipper);
- flipper = (ViewFlipper) findViewById(R.id.vf_flipper);
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- return this.detector.onTouchEvent(event);//由检测器 执行 activity.<span style="font-family: Arial, Helvetica, sans-serif;">onTouchEvent</span>
- }
- /*以下为 OnGestureListener 的方法*/
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- if (e1.getX() - e2.getX() > 120) {//向左滑,右边显示
- //this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
- //this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
- this.flipper.showNext();
- }
- if (e1.getX() - e2.getX() < -120) {//向右滑,左边显示
- this.flipper.showPrevious();
- }
- return false;
- }
- @Override
- public boolean onDown(MotionEvent e) {
- return false;
- }
- @Override
- public void onShowPress(MotionEvent e) {
- }
- @Override //单击
- public boolean onSingleTapUp(MotionEvent e) {
- return false;
- }
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
- return false;
- }
- @Override // 长按
- public void onLongPress(MotionEvent e) {
- }
- }
flipper.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <ViewFlipper
- android:id="@+id/vf_flipper"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" >
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:src="@drawable/a2" />
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:src="@drawable/a4" />
- <ImageView
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:src="@drawable/a3" />
- </ViewFlipper>