Android ViewFlipper触摸动画
今天给大家介绍一下如何实现androd主页面的左右拖动效果。实现起来很简单,就是使用ViewFlipper来将您要来回拖动的View装在一起,然后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可。比如当手指向左快速滑动时跳转到上一个View,手指向右快速滑动时跳转到下一个View,本例中使用图片作为各个View的页面,实现左右快速滑动显示不同的图片。
首先来看看我们的layout,如下所示:
<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
<viewflipper android:id="@+id/flipper" android:layout_below="@+id/CockpitLayout" android:layout_height="fill_parent" android:layout_width="fill_parent">
<include android:id="@+id/firstlayout" layout="@layout/first">
<include android:id="@+id/secondlayout" layout="@layout/second">
<include android:id="@+id/thirdlayout" layout="@layout/third">
<include android:id="@+id/fourthlayout" layout="@layout/fourth">
</include></include></include></include></viewflipper>
</linearlayout>
如上所示,在ViewFlipper中放置多个layout(接下来会在不同的layout中来回滑动),ViewFlipper在同一个页面就显示其中一个layout。ViewFlipper中的四个layout很简单,我们就放置一张图片,如下所示:
<linearlayout android:gravity="center_vertical" android:layout_height="fill_parent" android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<imageview android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/v1">
</imageview></linearlayout>
接下来我们来看看Activity,我们的Activity需要实现两个接口OnGestureListener,OnTouchListener。具体的代码如下所示,代码中都有相应的注释,这里就不再详述。
package com.ideasandroid.demo;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnTouchListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.ViewFlipper;
public class ViewFlipperDemo extends Activity implements OnGestureListener,OnTouchListener{
private ViewFlipper mFlipper;
GestureDetector mGestureDetector;
private int mCurrentLayoutState;
private static final int FLING_MIN_DISTANCE = 100;
private static final int FLING_MIN_VELOCITY = 200;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mFlipper = (ViewFlipper) findViewById(R.id.flipper);
//注册一个用于手势识别的类
mGestureDetector = new GestureDetector(this);
//给mFlipper设置一个listener
mFlipper.setOnTouchListener(this);
mCurrentLayoutState = 0;
//允许长按住ViewFlipper,这样才能识别拖动等手势
mFlipper.setLongClickable(true);
}
/**
* 此方法在本例中未用到,可以指定跳转到某个页面
* @param switchTo
*/
public void switchLayoutStateTo(int switchTo) {
while (mCurrentLayoutState != switchTo) {
if (mCurrentLayoutState > switchTo) {
mCurrentLayoutState--;
mFlipper.setInAnimation(inFromLeftAnimation());
mFlipper.setOutAnimation(outToRightAnimation());
mFlipper.showPrevious();
} else {
mCurrentLayoutState++;
mFlipper.setInAnimation(inFromRightAnimation());
mFlipper.setOutAnimation(outToLeftAnimation());
mFlipper.showNext();
}
}
;
}
/**
* 定义从右侧进入的动画效果
* @return
*/
protected Animation inFromRightAnimation() {
Animation inFromRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromRight.setDuration(500);
inFromRight.setInterpolator(new AccelerateInterpolator());
return inFromRight;
}
/**
* 定义从左侧退出的动画效果
* @return
*/
protected Animation outToLeftAnimation() {
Animation outtoLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoLeft.setDuration(500);
outtoLeft.setInterpolator(new AccelerateInterpolator());
return outtoLeft;
}
/**
* 定义从左侧进入的动画效果
* @return
*/
protected Animation inFromLeftAnimation() {
Animation inFromLeft = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, -1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
inFromLeft.setDuration(500);
inFromLeft.setInterpolator(new AccelerateInterpolator());
return inFromLeft;
}
/**
* 定义从右侧退出时的动画效果
* @return
*/
protected Animation outToRightAnimation() {
Animation outtoRight = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, +1.0f,
Animation.RELATIVE_TO_PARENT, 0.0f,
Animation.RELATIVE_TO_PARENT, 0.0f);
outtoRight.setDuration(500);
outtoRight.setInterpolator(new AccelerateInterpolator());
return outtoRight;
}
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
/*
* 用户按下触摸屏、快速移动后松开即触发这个事件
* e1:第1个ACTION_DOWN MotionEvent
* e2:最后一个ACTION_MOVE MotionEvent
* velocityX:X轴上的移动速度,像素/秒
* velocityY:Y轴上的移动速度,像素/秒
* 触发条件 :
* X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
*/
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) {
// 当像左侧滑动的时候
//设置View进入屏幕时候使用的动画
mFlipper.setInAnimation(inFromRightAnimation());
//设置View退出屏幕时候使用的动画
mFlipper.setOutAnimation(outToLeftAnimation());
mFlipper.showNext();
} else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
&& Math.abs(velocityX) > FLING_MIN_VELOCITY) {
// 当像右侧滑动的时候
mFlipper.setInAnimation(inFromLeftAnimation());
mFlipper.setOutAnimation(outToRightAnimation());
mFlipper.showPrevious();
}
return false;
}
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
return false;
}
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
public boolean onTouch(View v, MotionEvent event) {
// 一定要将触屏事件交给手势识别类去处理(自己处理会很麻烦的)
return mGestureDetector.onTouchEvent(event);
}
}
分享到:
相关推荐
在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,并且可以添加各种动画效果,使用户界面更加生动和互动。本篇将深入探讨如何利用ViewFlipper实现Switch动画特效,...
在Android开发中,`ViewFlipper`是一个非常实用的视图切换组件,它允许开发者轻松地在多个子视图之间进行动画切换。本项目提供了一个简单的`ViewFlipper`实现,便于初学者理解和掌握其用法。下面我们将深入探讨`...
总结,`ViewFlipper`是Android中实现滑动效果的强大工具,通过灵活地配置动画、定时器和事件监听,我们可以轻松创建出丰富的用户界面。在实际项目中,结合其他组件和动画库,`ViewFlipper`可以满足各种滑动切换的...
在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间进行切换,通常用于创建动态、交互式的用户界面。在本项目中,开发者利用ViewFlipper来实现屏幕间的动画切换效果,使得...
在Android开发中,ViewFlipper是一个非常有用的布局控件,它允许我们轻松地实现滑动翻页的效果。这个示例将向我们展示如何在应用程序中使用ViewFlipper来创建一个动态翻页界面,使得用户可以通过手势或编程方式切换...
本文将详细介绍如何在Android应用中使用ViewFlipper以及如何为其设置动画效果。 ViewFlipper的核心功能是展示并切换多个子视图。它继承自ViewGroup,因此可以容纳多个子视图(如ImageView、TextView等)。默认情况...
在Android开发中,ViewFlipper是一个非常实用的控件,它允许我们轻松地在多个视图之间进行切换,常...通过深入学习和理解这个源码,不仅能掌握ViewFlipper的使用,还能提升对Android事件处理、动画和自定义View的理解。
可以监听`GestureDetector`的手势事件,或者监听`ViewFlipper`的触摸事件,实现手动切换。 6. **边界处理**:当轮播到最后一张或第一张图片时,需要实现无缝循环的效果。这需要我们在切换时判断当前索引,并根据...
在Android开发中,ViewFlipper是一个非常实用的控件,用于在多个视图之间进行切换,通常用于实现动画效果,比如图片轮播、页面滑动等。本教程将引导新手了解如何利用ViewFlipper实现图片拖动的导航效果。 首先,...
`GestureDetector`是Android中处理手势识别的工具类,它能帮助我们识别出常见的触摸屏幕手势,如单击、双击、长按、滑动等。`GestureDetector`的核心在于它的`SimpleOnGestureListener`接口,开发者需要实现这个接口...
在Android开发中,ViewFlipper是一个非常实用的控件,用于在多个视图之间进行切换,通常用于实现动画效果,比如轮播图、引导页等。在这个“Android ViewFlipper简单应用”中,我们将深入理解如何使用ViewFlipper并...
通过对源代码的阅读和分析,我们可以学习到如何在Android应用中创建和控制ViewFlipper,如何设置动画,以及如何响应用户的触摸事件来实现平滑的视图切换。这将有助于开发者提升在Android UI设计和动画处理方面的专业...
在Android开发中,ViewFlipper是一个非常实用的控件,用于在多个视图之间进行切换,常用于实现轮播图、动画效果等场景。在这个"安卓Android源码——ViewFlipper1.rar"压缩包中,我们可以期待看到一个关于ViewFlipper...
在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,通常用于实现翻页、轮播图或者动画效果。在这个场景中,我们将探讨如何利用ViewFlipper来实现左右滑动的效果。 ...
总的来说,实现Android的翻书效果涉及到了Android动画系统、3D空间变换、视图操作、触摸事件处理、性能优化等多个方面。通过熟练掌握这些知识点,开发者可以创造出更加生动有趣的用户界面。在实际应用中,还需要结合...
在Android开发中,ViewFlipper是一个非常有用的布局组件,它允许开发者轻松地在多个视图之间切换,...同时,也可以根据自己的需求进行调整,比如改变翻页速度、添加更多的过渡动画,或者结合触摸事件实现手动翻页功能。
总结来说,"ViewFlipper左右翻页"的实现主要包括以下几个关键点:布局设计、触摸事件监听、按钮点击事件处理以及动画效果的设置。通过这些步骤,我们可以轻松创建一个具有流畅翻页体验的Android应用。在实际项目中,...
对于ViewFlipper,你可以设置定时器或者响应触摸事件来控制视图的切换。 此外,提供的图片资源1-12092Q036370-L.png和1_120928104258_1.png可能是示例界面的截图,帮助你理解设计和布局的最终效果。要实现类似的...
Android提供了`InfiniteAnimation`来实现无限循环的切换效果,可以使用`setInAnimation`和`setOutAnimation`方法为ViewFlipper添加进出场动画,如淡入淡出或滑动效果。例如: ```java ViewFlipper viewFlipper = ...