`
我是城
  • 浏览: 15775 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

ViewFlipper+GestureDetector实现不循环滑动

阅读更多

在布局文件中entering.xml 

<ViewFlipper
        android:id="@+id/entering_vf"
        android:layout_width="fill_parent"
        android:layout_height="350dip"
        android:flipInterval="1000"
        android:persistentDrawingCache="animation"
        android:visibility="invisible" >

        <include
            android:id="@+id/entering_carpart01"
            layout="@layout/entering_carpart01" />

        <include
            android:id="@+id/entering_carpart02"
            layout="@layout/entering_carpart02" />
    </ViewFlipper>

       

   布局文件 entering_carpart01

      

<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="390dip"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="40dip"
            android:layout_marginTop="20dip"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center" >

                <ImageView
                    android:id="@+id/entering_iv_carpre"
                    android:layout_width="293dip"
                    android:layout_height="151dip"
                    android:layout_marginLeft="100dip"
                    android:background="@drawable/car_01" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarPreWindow"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="240dip"
                    android:layout_marginTop="8dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarLight"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="160dip"
                    android:layout_marginTop="50dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarPre"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="243dip"
                    android:layout_marginTop="30dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarPlate"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="243dip"
                    android:layout_marginTop="83dip" />

                <ImageView
                    android:id="@+id/entering_iv_carbehind"
                    android:layout_width="253dip"
                    android:layout_height="162dip"
                    android:layout_marginLeft="500dip"
                    android:background="@drawable/car_02" />

                <ImageButton
                    android:id="@+id/entering_imbtn_behindCar_windown"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="620dip"
                    android:layout_marginTop="20dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_behindCar_middle"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="620dip"
                    android:layout_marginTop="68dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_behindCar_bottom"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="620dip"
                    android:layout_marginTop="103dip" />
            </FrameLayout>
        </LinearLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center" >

            <ImageView
                android:background="@drawable/car_03" 
                android:id="@+id/entering_iv_carleft"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="240dip"
               />

            <ImageButton
                android:id="@+id/entering_imbtn_sideCar_top"
                style="@style/entering_imageviewRed_style"
                android:layout_marginLeft="430dip" />

            <ImageButton
                android:id="@+id/entering_imbtn_sideCar_door"
                style="@style/entering_imageviewRed_style"
                android:layout_marginLeft="470dip"
                android:layout_marginTop="45dip" />

            <ImageButton
                android:id="@+id/entering_imbtn_sideCar_carwheels"
                style="@style/entering_imageviewRed_style"
                android:layout_marginLeft="350dip"
                android:layout_marginTop="35dip" />
        </FrameLayout>
    </LinearLayout>

</LinearLayout>


   布局文件  entering_carpart02

  

<?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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="390dip"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="40dip"
            android:layout_marginTop="20dip"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center" >

                <ImageView
                    android:id="@+id/entering_iv_carpre"
                    android:layout_width="293dip"
                    android:layout_height="151dip"
                    android:layout_marginLeft="100dip"
                    android:background="@drawable/car_01" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarPreWindow"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="240dip"
                    android:layout_marginTop="8dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarLight"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="160dip"
                    android:layout_marginTop="50dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarPre"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="243dip"
                    android:layout_marginTop="30dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_preCarPlate"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="243dip"
                    android:layout_marginTop="83dip" />

                <ImageView
                    android:id="@+id/entering_iv_carbehind"
                    android:layout_width="253dip"
                    android:layout_height="162dip"
                    android:layout_marginLeft="500dip"
                    android:background="@drawable/car_02" />

                <ImageButton
                    android:id="@+id/entering_imbtn_behindCar_windown"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="620dip"
                    android:layout_marginTop="20dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_behindCar_middle"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="620dip"
                    android:layout_marginTop="68dip" />

                <ImageButton
                    android:id="@+id/entering_imbtn_behindCar_bottom"
                    style="@style/entering_imageviewRed_style"
                    android:layout_marginLeft="620dip"
                    android:layout_marginTop="103dip" />
            </FrameLayout>
        </LinearLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center" >

            <ImageView
                android:background="@drawable/car_03" 
                android:id="@+id/entering_iv_carleft"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="240dip"
               />

            <ImageButton
                android:id="@+id/entering_imbtn_sideCar_top"
                style="@style/entering_imageviewRed_style"
                android:layout_marginLeft="430dip" />

            <ImageButton
                android:id="@+id/entering_imbtn_sideCar_door"
                style="@style/entering_imageviewRed_style"
                android:layout_marginLeft="470dip"
                android:layout_marginTop="45dip" />

            <ImageButton
                android:id="@+id/entering_imbtn_sideCar_carwheels"
                style="@style/entering_imageviewRed_style"
                android:layout_marginLeft="350dip"
                android:layout_marginTop="35dip" />
        </FrameLayout>
    </LinearLayout>

</LinearLayout>

 java代码

 

 在EnteringActivity.Activity   java文件中

private ViewFlipper viewFlipper;
// 定义一个手势识别器
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {

viewFlipper = (ViewFlipper) findViewById(R.id.entering_vf);
mGestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {

			public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

				if (Math.abs(velocityX) < 100)
					return true;

				if (Math.abs(e2.getRawY() - e1.getRawY()) > 100)
					return true;

				if (e2.getRawX() - e1.getRawX() > 100) {
					// 从右到左的移动
					if (viewFlipper.getDisplayedChild() == 0) {
						//viewFlipper对象没有子view的时候,停止滑动						
                                                  viewFlipper.stopFlipping();
                                                  return false;
					} else {
						showPre();
						return false;
					}

				}
				if (e2.getRawX() - e1.getRawX() < -100) {
					if (viewFlipper.getDisplayedChild() == 2 - 1) {
						//viewFlipper对象等于1的时候,停止滑动						
                                                 viewFlipper.stopFlipping();
                                                 return false;
					} else {
						showNext();
						return false;
					}
				}
				return false;

			};
		});
 

  关键就是要把  手势识别器 注册到 当前的Activity 的滑动方法里面

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// 当手指在屏幕上触摸的时候 利用手势识别器 识别相应的动作
		mGestureDetector.onTouchEvent(event);
		return super.onTouchEvent(event);
	}
  

 

 

 

	public void Imv1() {
		imvred.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.point_red)));
		imvpurple.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.position_point)));
	}

	public void Imv2() {
		imvred.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.position_point)));
		imvpurple.setBackgroundDrawable(new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.point_red)));
	}

	protected void showPre() {
		Animation outAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha_out);
		Animation inAnimation = AnimationUtils.loadAnimation(this, R.anim.alpha_in);
		viewFlipper.setOutAnimation(outAnimation);
		viewFlipper.setInAnimation(inAnimation);

		viewFlipper.showPrevious();

		Imv1();
	}

	private void showNext() {
		Animation outAnimation = AnimationUtils.loadAnimation(this, R.anim.tran_out);
		Animation inAnimation = AnimationUtils.loadAnimation(this, R.anim.tran_in);
		viewFlipper.setOutAnimation(outAnimation);
		viewFlipper.setInAnimation(inAnimation);
		viewFlipper.showNext();
		Imv2();
	}

  

分享到:
评论

相关推荐

    ViewFlipper+GestureDetector多页面切换

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

    android viewflipper 图片滑动demo

    5. **自动切换**:可以使用startFlipping()方法让图片自动循环滑动,通过setFlipInterval(int interval)设置切换间隔时间。 ```java viewFlipper.startFlipping(); viewFlipper.setFlipInterval(3000); // 每3秒...

    viewflipper实现左右滑屏

    10. **自定义滚动行为**:如果你需要更复杂的滑动行为,例如弹性滑动或者无限循环,可以考虑自定义ViewFlipper的子类并重写相关方法,如`onInterceptTouchEvent()`和`onTouchEvent()`。 了解并掌握以上知识点,你就...

    解析Android中实现滑动翻页之ViewFlipper的使用详解

    本文将深入讲解ViewFlipper的使用以及如何结合GestureDetector实现滑动翻页。 首先,我们来详细了解一下ViewFlipper。ViewFlipper是ViewAnimator类的子类,而ViewAnimator又继承自FrameLayout。这意味着ViewFlipper...

    ViewFlipper简单使用

    4. **自动轮播**:为了实现自动轮播,你需要在主线程的循环中定期调用ViewFlipper的`showNext()`或`showPrevious()`方法。为了避免阻塞主线程,你可以使用Handler和Runnable来实现定时任务。 ```java Handler ...

    ViewFlipper无限轮播

    这可以通过实现`GestureDetector.OnGestureListener`接口并在`onFling()`方法中处理滑动手势来完成。 4. **优化性能**: - 对于大量视图的轮播,为避免一次性加载所有视图导致性能下降,可以使用PagerAdapter(如`...

    android viewFipper实现图片上下左右滑动效果

    本教程将详细介绍如何利用ViewFlipper实现图片的上下左右滑动效果。 首先,让我们了解一下ViewFlipper的基本概念。ViewFlipper是ViewGroup的一个子类,它可以包含多个子视图(如ImageView)。通过调用其...

    android自定义轮播控件基于ViewFlipper

    可以监听`GestureDetector`的手势事件,或者监听`ViewFlipper`的触摸事件,实现手动切换。 6. **边界处理**:当轮播到最后一张或第一张图片时,需要实现无缝循环的效果。这需要我们在切换时判断当前索引,并根据...

    android viewflipper手势拖动效果(An-Beer工作室)

    你可以使用 GestureDetector 或者直接在 ViewFlipper 的子类中重写 onTouchEvent 方法来处理滑动事件。当检测到滑动事件时,调用 `showNext` 或 `showPrevious` 方法进行视图切换。 6. **自定义动画** Android ...

    图片左右循环切换Demo

    本教程将基于提供的"图片左右循环切换Demo"来详细介绍如何自定义一个继承自`ViewFlipper`的控件来实现这一功能。 `ViewFlipper`是Android SDK提供的一种布局容器,它允许我们在两个或更多的视图之间进行切换,通常...

    Android 滑动翻页源码

    实现滑动就必须介绍一下GestureDetector: GestureDetector类中可以用来检测各种手势事件。 该类有两个回调接口,分别用来通知具体的事件。 GestureDetector.OnDoubleTapListener:用来通知DoubleTap事件,...

    一个精典的左右滚动的实现

    本文通过一个具体的示例详细介绍了如何使用`ViewFlipper`和`GestureDetector`来实现在Android应用中左右滚动的效果。主要步骤包括:初始化`ViewFlipper`与`GestureDetector`、添加视图、处理触摸事件以及配置动画...

    多页滑屏手势

    在Android开发中,"多页滑屏手势"是一种常见的用户界面交互方式,它允许...在实际项目中,根据具体需求,你可能还需要处理更复杂的逻辑,如无限循环滑动、滑动方向判断等,但这些基础概念将为你提供一个良好的起点。

    Android 滑动翻页源码.zip

    实现滑动就必须介绍一下GestureDetector: GestureDetector类中可以用来检测各种手势事件。 该类有两个回调接口,分别用来通知具体的事件。 GestureDetector.OnDoubleTapListener:用来通知DoubleTap事件,类似...

    Android SwipeView类似桌面的滑动界面.rar

    2. **ViewPager的扩展**:如果项目使用了ViewPager,开发者可能对ViewPager进行了自定义,以实现更灵活的滑动效果,例如添加边缘滑动、无限循环等特性。 3. **适配器(Adapter)机制**:SwipeView通常与一个Adapter...

    Android ViewFlipper用法实例分析

    在本实例中,我们将深入理解如何使用ViewFlipper来实现手动滑动屏幕时逐个显示图片的功能。 首先,我们创建一个名为`ViewFlipperTestActivity`的Activity,并实现`OnGestureListener`接口,以便处理手势事件。`...

    图片轮播的一个demo

    - 添加无限轮播:通过循环数组或列表,使轮播在达到最后一张图片后回到第一张,实现无缝循环。 - 添加指示器:在界面底部添加小圆点或数字,表示当前显示的图片位置。 - 动画效果:可以自定义切换动画,如淡入淡出、...

    Android高级应用源码-分享一个自己做的 Slider 库.rar

    3. **无限循环**:许多Slider库支持无限循环滑动,这就需要巧妙地处理数据源和当前页面的索引。 4. **监听事件**:提供滑动开始、结束、点击等事件的回调接口,方便开发者进行业务逻辑处理。 5. **性能优化**:通过...

    图片视频横向滑动ListView

    HorizontalListView的实现原理主要依赖于Android的ViewFlipper或ViewPager类,通过重写和调整其滚动行为,使得用户可以左右滑动来切换内容。这种组件通常需要自定义适配器(Adapter),以便将数据集中的图片和视频...

    TestFlip.rar_android开发_Java_

    然后,在你的Java代码中,你可以找到这个`ViewFlipper`实例并设置动画,比如使用`InfiniteAnimation`来实现无限循环的滑动效果: ```java ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.view_flipper...

Global site tag (gtag.js) - Google Analytics