使用手势实现翻页效果

本文介绍了一个使用手势识别实现翻页效果的应用案例。通过ViewFlipper组件结合GestureDetector,实现了手机上常见的图片翻页功能。

上一篇博客我们讨论了手势侦测类GestureDetector,这次我们继续一个实例,

用手势来实现翻页,这样我们就可以理解我们在手机上翻照片的原理了。

首先界面是ViewFlipper实现的,我们简单地看一下界面代码(其实就是之前哪个代码):

<ViewFlipper
            android:id="@+id/mViewFliper_vf"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
				            <LinearLayout 
				        android:layout_width="match_parent"
				        android:layout_height="wrap_content">
				        <ImageView 
				            android:layout_width="match_parent"
				            android:layout_height="160dip"
				            android:background="@drawable/default_pic_1"/>
				    </LinearLayout>
				      <LinearLayout 
				        android:layout_width="match_parent"
				        android:layout_height="wrap_content"
				        android:orientation="vertical">
				        <ImageView 
				            android:layout_width="match_parent"
				            android:layout_height="160dip"
				            android:background="@drawable/default_pic_2"/>
				    </LinearLayout>
				      <LinearLayout 
				        android:layout_width="match_parent"
				        android:layout_height="wrap_content"
				        android:orientation="vertical">
				        <ImageView 
				            android:layout_width="match_parent"
				            android:layout_height="160dip"
				            android:background="@drawable/default_pic_3"/>
				    </LinearLayout>
				      <LinearLayout 
				        android:layout_width="match_parent"
				        android:layout_height="wrap_content"
				        android:orientation="vertical">
				        <ImageView 
				            android:layout_width="match_parent"
				            android:layout_height="160dip"
				            android:background="@drawable/default_pic_4"/>
				    </LinearLayout>
        </ViewFlipper>
ViewFlipper中设计四张图片,在同一个界面内用来切换。

再来看Activity代码:

public class TestUIActivity extends Activity implements OnGestureListener, OnTouchListener {
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);
        date_TextView = (TextView) findViewById(R.id.home_date_tv);
        date_TextView.setText(getDate());
      
	//视图切换
        viewFlipper = (ViewFlipper) findViewById(R.id.mViewFliper_vf);
        mGestureDetector = new GestureDetector(this);
        viewFlipper.setOnTouchListener(this);	//设置触摸监听器
        viewFlipper.setLongClickable(true);		
        viewFlipper.setOnClickListener(clickListener);	//设置按下监听器
        displayRatio_selelct(currentPage);
        
        
        MyScrollView myScrollView = (MyScrollView) findViewById(R.id.viewflipper_scrollview);
        myScrollView.setOnTouchListener(onTouchListener);
        //设置手势侦探
        myScrollView.setGestureDetector(mGestureDetector);
        thread.start();
    }
private OnTouchListener onTouchListener = new OnTouchListener() {
		
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			return mGestureDetector.onTouchEvent(event);
		}
	};


//重写OnGestureListener的一些方法
	//
	@Override
	public boolean onDown(MotionEvent e) {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		// TODO Auto-generated method stub
		Log.e("view", "onFling");
		if (e1.getX() - e2.getX()> FLING_MIN_DISTANCE  
                && Math.abs(velocityX) > FLING_MIN_VELOCITY ) {
			Log.e("fling", "left");
			showNextView();
			showNext = true;
			return true;
		} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE  
                && Math.abs(velocityX) > FLING_MIN_VELOCITY){
			Log.e("fling", "right");
			showPreviousView();
			showNext = false;
			return true;
		}
		return false;
	}
	@Override
	public void onLongPress(MotionEvent e) {
		
	}
	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		return false;
	}
	@Override
	public void onShowPress(MotionEvent e) {
		
	}
	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		return false;
	}
这样,当我们在屏幕上交互时,比如从左向右滑动或者从右向左滑动,屏幕图片发生改变:

滑动手指:



这样就实现了翻页效果。

近来智能手机非常流行,一个很久以前的idea在我的脑海里复活——用手机代替现有的PPT翻页器。众所周知,售前人员在给客户讲解PPT时,经常需要远离自己的电脑而走近投影屏幕。这时候讲解就需要用到无线翻页器。因此翻页器(Wireless Presenter)作为一款产品就开始热销了。我是没钱买的,不过既然我们的手机支持编程,支持WIFI,那为什么不自己DIY一个翻页器呢?Let’s Go!   WIFI手机PPT翻页器的原理很简单:手机上的客户端通过无线网络向PC上的服务端发送翻页命令,PC上的服务器程序根据命令,在当前正在播放的 PPT幻灯片上模拟键盘操作。 软件运行环境: PC端:Windows XP/2003/Vista/Win7 + .NetFrameWork 3.5, 手机端:Windows Mobile 6.5 + .Net Compact FrameWork 3.5; 1、软件分为两个部分PC端程序和手机端程序。 2、程序运行之前,请确认手机能和PC机通过Wifi网络正常通讯; 3、必须在PC机的PowerPoint中启动播放幻灯片后,翻页程序才能看到效果; 4、本人手机是HTC Touch T3333,可以实现音量控制键翻页,对与其他设备可能需要修改代码,适当调整或者可以联系我。 软件更新:http://i.isclab.org 涉及到的技术: C# Form编程 C# Socket编程 C# 调用Win32API 枚举窗口 C# 调用Win32API 模拟键盘 C# 调用Win32API Hook拦截键盘 C# 多线程 …… Python版本的程序(PC端)也用到以上类似技术
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值