`
dengyin2000
  • 浏览: 1238163 次
  • 性别: 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);  
    }  
}  
分享到:
评论

相关推荐

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

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

    android 手势 滑动翻页

    五、手势特效 为了让翻页效果更加自然和吸引人,可以添加一些特效。例如,使用`ObjectAnimator`实现平滑的页面滑动动画,或者通过`Scroller`类控制翻页速度和弹性效果。还可以添加滑动过程中页面的透明度变化,模拟...

    Android滑动菜单特效实现,仿人人客户端侧滑效果demo程序源码

    这个示例代码旨在模仿人人客户端的侧滑菜单效果,提供了丰富的交互体验和视觉特效。 在Android中,实现滑动菜单通常有两种主要方法:使用第三方库,如`SlidingPaneLayout`或`Android Design Support Library`中的`...

    Android应用源码之android 仿真翻页效果.zip

    总之,"Android应用源码之android 仿真翻页效果"涵盖了Android应用开发中的多个关键领域,包括UI设计、动画实现、手势识别和性能优化。通过研究这个源码,开发者不仅可以学习到如何实现仿真翻页效果,还可以提高自己...

    Android模拟翻书效果

    `GestureDetector`是一个用于识别复杂手势的工具类,它可以识别各种各样的手势,如单击、双击、滑动等。在实现翻页效果时,我们可以通过`GestureDetector`监听用户的滑动手势,进而触发页面的切换。 #### 二、实现...

    GridView 使用实例

    - 滑动删除:通过手势识别,实现滑动单元格执行删除操作。 7. 示例代码 创建一个简单的GridView,显示字符串数组: ```java GridView gridView = findViewById(R.id.gridView); gridView.setNumColumns(3); //...

Global site tag (gtag.js) - Google Analytics