欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-16 10:10:46
本文实例讲述了android使用viewflipper和gestruedetector共同实现滑屏效果。分享给大家供大家参考,具体如下: 关于gesturedetecto...

本文实例讲述了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程序设计有所帮助。

上一篇:

下一篇: