Android使用ViewFlipper和GestrueDetector共同实现滑屏效果实例

 更新时间:2017年02月24日 10:46:33   作者:Jacob-wj  
这篇文章主要介绍了Android使用ViewFlipper和GestrueDetector共同实现滑屏效果,结合完整实例形式分析了ViewFlipper和GestrueDetector控件实现滑屏功能的布局与相关操作技巧,需要的朋友可以参考下

本文实例讲述了Android使用ViewFlipper和GestrueDetector共同实现滑屏效果。分享给大家供大家参考,具体如下:

关于GestureDetector的相关知识,前面已经介绍过了,不懂的大家可以去了解一下。

1.main.xml

<?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:background="@drawable/bg"
  android:orientation="vertical" >
  <ViewFlipper
    android:id="@+id/viewFlipper1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:persistentDrawingCache="animation"
    android:flipInterval="1000"
    android:inAnimation="@anim/push_left_in"
    android:outAnimation="@anim/push_left_out"
    >
    <include android:id="@+id/lay1" layout="@layout/layout1"/>
    <include android:id="@+id/lay2" layout="@layout/layout2"/>
  </ViewFlipper>
</LinearLayout>

注:layout1和layout2 布局很简单,就是有一个textview和一个button,就不在这里写出了。其中包含了两个特效xml文件,放在res/anim下

1.push_left_in

<?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.0"
  android:toAlpha="1.0"
  android:duration="500" />
</set>

2 push_left_out

<?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.0"
  android:duration="500" />
</set>

主类:

package com.wj.gesture;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
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.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;
public class GestureDetectorTest extends Activity implements OnClickListener, OnTouchListener,OnGestureListener,OnDoubleTapListener{
  GestureDetector gestureDetector;
  private Button next = null,up = null;
  private ViewFlipper flipper = null;
  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);
    initview();
    setListener();
  }
  private void initview(){
    gestureDetector = new GestureDetector(this);
    next = (Button)this.findViewById(R.id.button1);
    up = (Button)this.findViewById(R.id.button2);
    next.setOnClickListener(this);
    up.setOnClickListener(this);
    flipper  = (ViewFlipper)this.findViewById(R.id.viewFlipper1);
    flipper.setLongClickable(true);
  }
  private void setListener(){
    flipper.setOnTouchListener(this);
  }
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    //Toast.makeText(this, "ontouch", 1000).show();
    return gestureDetector.onTouchEvent(event);
  }
  @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) {
    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) {
    if (e1.getX()-e2.getX()>FLING_MIN_DISTANCE&&Math.abs(velocityX)>FLING_MIN_VELOCITY) {
      flipper.setInAnimation(inFromRightAnimation());
      flipper.setOutAnimation(outToLeftAnimation());
      flipper.showNext();
    }else if (e2.getX()-e1.getX()>FLING_MIN_DISTANCE&&Math.abs(velocityX) > FLING_MIN_VELOCITY) {
      flipper.setInAnimation(inFromLeftAnimation());
      flipper.setOutAnimation(outToRightAnimation());
      flipper.showPrevious();
    }
    return false;
  }
  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;
  }
  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;
  }
  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;
  }
  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;
  }
  @Override
  public boolean onSingleTapConfirmed(MotionEvent e) {
    // TODO Auto-generated method stub
    return false;
  }
  @Override
  public boolean onDoubleTap(MotionEvent e) {
    // TODO Auto-generated method stub
    return false;
  }
  @Override
  public boolean onDoubleTapEvent(MotionEvent e) {
    // TODO Auto-generated method stub
    return false;
  }
  @Override
  public void onClick(View v) {
    if (v==next) {
      flipper.showNext();
    }else{
      flipper.showPrevious();
    }
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结

希望本文所述对大家Android程序设计有所帮助。

相关文章

  • Android 显示刷新频率的实现代码

    Android 显示刷新频率的实现代码

    这篇文章主要介绍了Android 显示刷新频率的实现代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Android 安全加密:非对称加密详解

    Android 安全加密:非对称加密详解

    本文主要介绍Android 安全加密,非对称加密的知识,这里整理了详细的资料,及使用方法,有需要的小伙伴可以参考下
    2016-09-09
  • Android编程开发中ListView的常见用法分析

    Android编程开发中ListView的常见用法分析

    这篇文章主要介绍了Android编程开发中ListView的常见用法,较为详细的分析了ListView的功能及常见使用方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • Android获取文字高度的三种方法

    Android获取文字高度的三种方法

    这篇文章主要给大家介绍了Android获取文字高度的三种方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • 小心!Listview结合EditText使用实例中遇到的那些坑

    小心!Listview结合EditText使用实例中遇到的那些坑

    小心!Listview结合EditText使用实例中遇到的那些坑,解决EditText焦点丢失、保存数据以及滚动冲突的问题,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android进阶Handler应用线上卡顿监控详解

    Android进阶Handler应用线上卡顿监控详解

    这篇文章主要为大家介绍了Android进阶Handler应用线上卡顿监控详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Android编程开发之EditText中不输入特定字符会显示相关提示信息的方法

    Android编程开发之EditText中不输入特定字符会显示相关提示信息的方法

    这篇文章主要介绍了Android编程开发之EditText中不输入特定字符会显示相关提示信息的方法,涉及Android针对EditText的布局操作及内容判定相关技巧,需要的朋友可以参考下
    2015-12-12
  • 浅谈Android中AsyncTask的工作原理

    浅谈Android中AsyncTask的工作原理

    AsyncTask是Android本身提供的一种轻量级的异步任务类。它可以在线程池中执行后台任务,然后把执行的进度和最终的结果传递给主线程更新UI。本文将介绍Android中AsyncTask的工作原理。
    2021-06-06
  • Kotlin编程条件控制示例详解

    Kotlin编程条件控制示例详解

    这篇文章主要为大家介绍了Kotlin编程条件控制示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • android中对文件加密解密的实现

    android中对文件加密解密的实现

    本文主要介绍了android中对文件加密解密的实现,文件加密现在的应用很广,有需要的朋友可以了解一下。
    2016-10-10

最新评论