`
dengyin2000
  • 浏览: 1228455 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ViewFlipper识别手势和特效。

阅读更多
http://mobile.51cto.com/hot-232209.htm


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 implementsOnGestureListener,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, floatvelocityX,  
            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, floatdistanceX,  
            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);  
    }  
}  
分享到:
评论

相关推荐

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

    在这个“最简单的ViewFlipper实现图片跟随手势滑动”的教程中,我们将深入探讨如何通过源码和工具来创建一个用户可以通过手势左右滑动来切换图片的应用。 首先,我们要了解ViewFlipper的基本用法。ViewFlipper继承...

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

    这个"ViewFlipper和手势实现android软件透明导航"的主题,意味着我们将探讨如何利用ViewFlipper结合手势识别来创建一个具有透明导航功能的Android应用。以下是对这些知识点的详细解释: 1. **ViewFlipper**: ...

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

    【Android ViewFlipper 手势拖动效果详解】 在 Android 应用开发中,ViewFlipper 是一个非常有用的布局组件,它...通过合理利用手势识别和自定义动画,开发者可以创造出丰富多样的界面效果,提升应用程序的整体质量。

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

    开发者可以参考这个示例来学习如何在实际项目中运用ViewFlipper和动画效果,以提升用户体验。 总结起来,Android的`ViewFlipper`组件为开发者提供了一种简便的方式来切换视图并添加动画效果。结合自定义控件和anim...

    Android中使用ViewFlipper进行手势切换实例

    至此,我们就完成了使用ViewFlipper和手势识别在Android中切换视图的基本实现。通过这种方式,用户可以通过简单的手势操作来浏览多个视图,提升了应用的交互性和用户体验。当然,实际项目中可能需要对滑动边界、手势...

    ViewFlipper和Gesture的使用(1)

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

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

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

    ViewFlipper

    2. **手动翻转**:用户可以通过手势(如滑动)来切换视图,或者通过调用`showNext()`和`showPrevious()`方法来程序控制翻转。 3. **动画支持**:在切换视图时,ViewFlipper可以添加动画效果,比如淡入淡出、滑动等...

    viewFlipper

    `ViewFlipper`是Android平台中的一个视图切换器组件,常用于实现各种动态效果,如广告栏的轮询播放、页面的滑动切换等。...在实际项目中,还可以结合其他控件和手势检测等技术,实现更加丰富的交互体验。

    viewflipper

    在Android开发中,`ViewFlipper` 是一个非常实用的组件,主要用于展示一系列视图,并且可以轻松地在这些视图之间切换,实现...同时,根据项目需求,我们还可以通过自定义动画和手势监听来增强其功能,提升用户体验。

    ViewPager和ViewFlipper实现图片左右滑动

    总结,"ViewPager和ViewFlipper实现图片左右滑动"主要是利用这两个组件的特性,结合数据适配和手势处理,创建一个可滑动浏览的图片导航界面。在实际项目中,开发者应根据需求选择合适的组件,比如,如果需要实现多页...

    ViewFlipper和ViewSwitcher的使用

    ViewFlipper和ViewSwitcher的使用:屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。 通过查看OPhone API文档可以...

    TabHost + ViewFlipper实现滑动翻页

    `TabHost` 和 `ViewFlipper` 是两个非常有用的组件,可以构建出具有多页切换功能的界面,提供丰富的交互体验。`TabHost` 用于创建底部的标签栏,而 `ViewFlipper` 可以实现页面之间的滑动切换。接下来,我们将深入...

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

    在Android开发中,实现用户友好的交互体验是至关重要的,其中划动翻页是一种常见的功能,常见于电子书、幻灯片展示等...通过对这些代码的学习和理解,开发者可以进一步提升自己在Android手势识别和视图切换方面的技能。

    ViewFlipperDemo

    此外,他们还需要实现`Runnable`接口,以便在每次定时器触发时调用`ViewFlipper`的`setInAnimation`和`setOutAnimation`方法,定义进入和退出动画。 动画效果可以通过`android.R.anim`中的预定义动画资源实现,如`...

Global site tag (gtag.js) - Google Analytics