`
ipjmc
  • 浏览: 709145 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用ViewFlipper和Gesture实现手势切换

阅读更多
        ViewFlipper继承FrameLayout,完全可以把它当成一种FrameLayout,只是多了一种功能,很方便的实现在不同的层中实现切换,还可以设置一些动画。废话不说了,直接上代码

    main.xml,我在ViewFlipper中设置了一个Button,但是必须取消Clickable才能让ViewFlipper捕捉到onTouch事件,原因可参考文章:http://orgcent.com/android-touch-event-mechanism/


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    
	<Button android:id="@+id/button" android:text="Click Me"
	    android:layout_width="fill_parent" android:layout_height="wrap_content" />


<!--在ViewFlipper中定义3个控件, TextView, TextView和Button-->

    <ViewFlipper android:id="@+id/flipper" android:longClickable="true"
        android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1">
        
        <TextView android:text="00000000000"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:background="@android:color/background_dark" />
        
        <TextView android:text="11111111111"
            android:layout_width="fill_parent" android:layout_height="fill_parent"
            android:background="@android:color/background_light" />
        
        <Button android:text="Click Me" android:clickable="false"
	    	android:layout_width="fill_parent" android:layout_height="fill_parent" />
    </ViewFlipper>

    <TextView android:id="@+id/footer"  android:background="#0000FF"
        android:layout_width="fill_parent" android:layout_height="100dp"/>
</LinearLayout>


    切换是用的的4个动画,直接用的是网上的,感谢原作者。 http://blog.csdn.net/yzhyutian/article/details/6236504

    1.push_left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromXDelta="100%p" android:toXDelta="0"
		android:duration="500" />
	<alpha android:fromAlpha="0.1" android:toAlpha="1.0"
		android:duration="500" />
</set>

    2.push_left_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromXDelta="0" android:toXDelta="-100%p"
		android:duration="500" />
	<alpha android:fromAlpha="1.0" android:toAlpha="0.1"
		android:duration="500" />
</set>


    3.push_right_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromXDelta="-100%p" android:toXDelta="0"
		android:duration="500" />
	<alpha android:fromAlpha="0.1" android:toAlpha="1.0"
		android:duration="500" />
</set>


    4.push_right_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:fromXDelta="0" android:toXDelta="100%p"
		android:duration="500" />
	<alpha android:fromAlpha="1.0" android:toAlpha="0.1"
		android:duration="500" />
</set>


    ViewFlipperActivity.java,需要实现两个接口OnTouchListener, OnGestureListener,首先通过OnTouchListener识别出Touch事件,并将事件交给GestureDetector,然后OnGestureListener就能判断出是哪一种手势了。
package com.ipjmc.viewflipper;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;
import android.widget.ViewFlipper;

public class ViewFlipperActivity extends Activity implements OnTouchListener, OnGestureListener {
    /** Called when the activity is first created. */
	
	public static final String TAG = "ViewFlipper";
	Button mButton;
	ViewFlipper mFlipper;
	TextView mFooter;
	GestureDetector mDetector;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

		Log.i(TAG, "onCreate");
        mFlipper = (ViewFlipper) findViewById(R.id.flipper);
        mFlipper.setOnTouchListener(this); //注册OnTouch监听器
        
        //本来需要设置LongClickable,否则无法捕捉到touch事件,因为在xml中已经设置了,这里就不需要了。
        //mFlipper.setLayoutParams(true);
        
        mButton = (Button) findViewById(R.id.button);
        mButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				mFlipper.showNext();
			}
		});
        
		//mFooter只是用来做一些事件捕获的测试用的,无视好了
        mFooter = (TextView) findViewById(R.id.footer);
        mFooter.setOnTouchListener(this);
        
		//用OnGestureListener初始化一个Detector,用于识别手势,OnGestureListener的每一个方法代表识别出的每一个手势
        mDetector = new GestureDetector(this); 
    }

	@Override
	public boolean onDown(MotionEvent e) {
		// 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 onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		// TODO Auto-generated method stub
		return false;
	}

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

	/*
	*识别出了手指在屏幕上的快速滑动事件
	*/
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		Log.i(TAG, "Fling Happened!");  
        if (e1.getX() - e2.getX() > 120) {  
            mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));  
            mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));  
            mFlipper.showNext();  
            return true;  
        } else if (e1.getX() - e2.getX() < -120) {  
            mFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));  
            mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));  
            mFlipper.showPrevious();  
            return true;  
        }  
		return false;
	}

	/*
	 * 在OnTouchListener.onTouch(),将事件交给GestureDetector.onTouchEvent()处理,由GestureDetector识别是哪一种手势
	 * @see android.view.View.OnTouchListener#onTouch(android.view.View, android.view.MotionEvent)
	 */
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		if (v.getId() == R.id.flipper) {
			return mDetector.onTouchEvent(event); //将事件交给GestureDetector.onTouchEvent()
		}
		return false;
	}
	
	/** 
	 *Called when a touch screen event was not handled by any of the views under it. This is most useful to process touch events that happen outside of your window bounds, where there is no view to receive it.
	 *
	 *官方文档说当一个Touch事件,没有被任何子View处理时,这个方法会被调用。
	 *
	 *把它放到这里当然没有用了,只是为了防止和OnTouchListener.onTouch(View v, MotionEvent event)混淆
	 */
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		Log.i(TAG, "onTouchEvent()"); 	//触摸footer时,会打印日志
		return super.onTouchEvent(event);
	}
}


    参考文章:http://blog.csdn.net/yzhyutian/article/details/6236504
分享到:
评论

相关推荐

    ViewFlipper和Gesture的使用(1)

    在“ViewFlipper和Gesture的使用(一)”的例子中,我们将探讨如何结合`ViewFlipper` 和手势识别来实现更丰富的用户交互。 `ViewFlipper` 内部可以包含多个子视图,比如`ImageView`、`TextView` 或者自定义的布局。...

    最简单的ViewFlipper实现图片跟随手势滑动

    要实现手势滑动切换图片,我们需要添加一个GestureDetector。GestureDetector是Android提供的用于处理常见手势的类,比如滑动、点击等。创建一个GestureDetector实例,并重写onDown、onFling以及onScroll等方法,以...

    ViewFlipper和ViewPage实现滑动切换界面

    在Android开发中,创建动态和交互丰富的用户界面是至关重要的,`ViewFlipper`和`ViewPager`组件就提供了这样的功能,让开发者能够实现界面之间的滑动切换效果。这两个组件各有特点,适合不同的应用场景。 首先,`...

    Android使用ViewFlipper做页面切换,与手势滑动切换的使用

    在android上实现手势的识别也比较简单,可以实现OnTouchListener和OnGuestureListener接口, 然后在OnTouch函数中注册GestureDetector来判别手势动作, http://wang-peng1.iteye.com/blog/572886 ...

    ViewFlipper和手势实现android软件透明导航

    - 可能会有一个自定义的`GestureListener`类,继承自` GestureDetector.SimpleOnGestureListener`,并在其中实现手势识别的逻辑。 - 对于透明导航,可能在Activity的`onCreate()`方法中设置了透明导航栏的主题,...

    ViewFlipper实现左右切换

    结合源代码文件`Test_05 使用ViewFlipper实现左右滚动切换`,你可以更深入地理解和实践这一功能,从而提升你的Android UI设计能力。记得在实际项目中灵活运用这些知识点,为用户提供更丰富的交互体验。

    android 利用ViewFlipper来实现滑动切换

    在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地实现在多个视图之间进行滑动切换的效果。这种效果常见于各种应用程序,如轮播图、页面导航等。下面我们将深入探讨如何利用ViewFlipper...

    ViewFlipper控件实现各种屏幕切换

    本教程将深入讲解如何利用ViewFlipper和anim动画文件来实现各种屏幕切换效果。 首先,ViewFlipper是LinearLayout的子类,它允许我们在两个或更多视图之间进行动态切换,而且可以添加动画效果,使得切换过程更加流畅...

    Android ViewFlipper实现页面的滑动切换

    下面将详细探讨如何在Android应用中使用ViewFlipper来实现页面的滑动切换。 首先,我们需要了解ViewFlipper的基本结构。一个ViewFlipper可以包含多个子视图,如ImageView、TextView或自定义布局。在初始化时,...

    Android源码-使用ViewFlipper+GestureDetector实现划动翻页

    这些代码为我们展示了如何结合使用`ViewFlipper`和`GestureDetector`来处理不同的手势事件,实现划动翻页的功能。通过对这些代码的学习和理解,开发者可以进一步提升自己在Android手势识别和视图切换方面的技能。

    ViewFlipper实现滑屏切换View

    为了实现更丰富的滑动效果,我们可以使用ViewFlipper的inAnimation和outAnimation属性来设置视图切换时的动画效果。例如,我们可以设置淡入淡出动画: ```xml &lt;!-- 进入动画 --&gt; &lt;!-- 退出动画 --&gt; ...

    Android ActivtiyGroup和ViewFlipper实现Activity滑屏切换

    `ActivityGroup`和`ViewFlipper`是两种可以用来实现Activity滑屏切换的技术。 `ActivityGroup`是Android早期API(在API 13被弃用)中的一个类,它允许我们在一个单独的`TabHost`或`Activity`中嵌套多个`Activity`。...

    Android使用ViewFlipper实现Switch动画特效。

    在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,并且可以添加各种动画效果,使用户界面更加生动和互动。本篇将深入探讨如何利用ViewFlipper实现Switch动画特效,...

    Android中利用viewflipper动画切换屏幕效果

    在本项目中,开发者利用ViewFlipper来实现屏幕间的动画切换效果,使得用户体验更加生动有趣。 首先,我们需要了解ViewFlipper的基本用法。在`MainActivity`类中,`ViewFlipper`对象被初始化为`flipper`。通过调用`...

    ViewFlipper+GestureDetector多页面切换

    在Android开发中,ViewFlipper和GestureDetector是两个非常重要的组件,它们可以帮助开发者实现丰富的用户交互功能,尤其是多页面切换。本教程将深入探讨如何利用这两个工具来创建一个高效的多页面切换体验。 **...

    ViewFlipper实现界面滑动切换

    以上就是使用ViewFlipper实现界面滑动切换的基本步骤,结合实际需求,你可以进一步定制动画效果,或者添加更多的交互元素,如指示器、手势识别等,以提升用户体验。在项目`MyViewFlipper`中,你将能看到具体的实现...

    Android使用ViewFlipper实现左右滑动效果面

    在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,通常用于实现翻页、轮播图或者动画效果。在这个场景中,我们将探讨如何利用ViewFlipper来实现左右滑动的效果。 ...

    使用ViewFlipper+GestureDetector实现轮播图(APP引导页面)

    通过这种方式,我们成功地使用`ViewFlipper`和`GestureDetector`实现了轮播图功能,包括手动滑动和自动播放。这种实现方式简单易懂,且适用于大多数Android项目中的轮播图需求。在实际开发中,你还可以根据需要添加...

    android 利用ViewFlipper来实现滑动切换Activity

    利用viwflipper来将多个activity封装在一个view中,通过实现OnGestureListener接口的onTouchEvent()方法和onFling() 方法,即可通过手持滑动切换activity。

    用ViewFlipper+GestureDetector实现的滑屏demo

    本示例项目“用ViewFlipper+GestureDetector实现的滑屏demo”正是针对这一需求,通过结合`ViewFlipper`和`GestureDetector`来创建一个简单易用的滑动切换界面。下面我们将详细探讨这两个关键组件以及如何将它们结合...

Global site tag (gtag.js) - Google Analytics