天天看点

ViewFlipper实现多页面切换

1、屏幕切换指的是在同一个activity内屏幕见的切换,最长见的情况就是在一个framelayout内有多个页面,比如一个系统设置页面;一个个性化设置页面。

2、介绍viewfilpper类

viewflipper

extends viewanimator

java.lang.object

   ↳ android.view.view

   ↳ android.view.viewgroup

   ↳ android.widget.framelayout

   ↳ android.widget.viewanimator

   ↳ android.widget.viewflipper

class overview

simple viewanimator that will animate between two or more views that have been added to it. only one child is shown at a time. if requested, can automatically flip between each child at a regular interval.

意思是:简单的viewanimator之间,两个或两个以上的view加上动画效果。只有一个小孩会显示在一个时间。如果需要,每个孩子能自动翻转之间在固定的时间间隔。

该类继承了framelayout类,viewanimator类的作用是为framelayout里面的view切换提供动画效果。

该类有如下几个和动画相关的函数:

 setinanimation:设置view进入屏幕时候使用的动画,该函数有两个版本,一个接受单个参数,类型为android.view.animation.animation;一个接受两个参数,类型为context和int,分别为context对象和定义animation的resourceid。 

 setoutanimation: 设置view退出屏幕时候使用的动画,参数setinanimation函数一样。

shownext: 调用该函数来显示framelayout里面的下一个view。

showprevious: 调用该函数来显示framelayout里面的上一个view。

3、首选看一下定义四个动画的xml文件:

in_left_right.xml——从左到右进入屏幕

<?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="2000"   

        />   

</set>   

out_left_right.xml——从左到右出去屏幕

        android:fromxdelta="0"   

        android:toxdelta="100%p"   

in_right_left.xml——从右到左进入屏幕

        android:fromxdelta="100%p"   

out_right_left.xml——从右到左出去屏幕

        android:toxdelta="-100%p"   

4、定义main.xml文件

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"   

    android:layout_width="fill_parent"   

    android:layout_height="fill_parent"   

    android:background="#ffffff"   

    android:orientation="vertical"   

    android:padding="15dp" >   

    <viewflipper   

        android:id="@+id/flipper"   

        android:layout_width="fill_parent"   

        android:layout_height="fill_parent" >   

         <!-- 第一个页面 -->     

        <linearlayout            

            android:id="@+id/layout1"   

            android:layout_width="fill_parent"   

            android:layout_height="fill_parent"    

            android:orientation="vertical">   

            <spinner   

                android:id="@+id/spinner"   

                android:layout_width="fill_parent"   

                android:layout_height="wrap_content" />   

            <com.tiantang.testandroid1.mytextview   

                android:id="@+id/mytext"   

                android:layout_height="wrap_content"   

                android:clickable="true"   

                android:ellipsize="marquee"   

                android:focusable="true"   

                android:focusableintouchmode="true"   

                android:lines="1"   

                android:marqueerepeatlimit="marquee_forever"   

                android:scrollhorizontally="true"   

                android:text="1234567890987654321234556778909876765453234567898765322"   

                android:textcolor="#000000"   

                android:textsize="20dp" />   

        </linearlayout>   

        <!-- 第二个页面 -->     

        <slidingdrawer   

            android:id="@+id/drawer"   

            android:layout_height="fill_parent"   

            android:content="@+id/content"   

            android:handle="@+id/handle" >   

            <imageview   

                android:id="@id/handle"   

                android:layout_width="50dp"   

                android:layout_height="50dp"   

                android:src="@drawable/info" />   

                android:id="@id/content"   

                android:layout_height="fill_parent"   

                android:src="@drawable/confirm_bg" />   

        </slidingdrawer>   

    </viewflipper>   

</linearlayout>   

5、java代码实现:

package com.tiantang.testandroid1;   

import android.app.activity;   

import android.content.context;   

import android.os.bundle;   

import android.view.gesturedetector;   

import android.view.gesturedetector.ongesturelistener;   

import android.view.layoutinflater;   

import android.view.motionevent;   

import android.view.view;   

import android.view.view.ontouchlistener;   

import android.view.viewgroup;   

import android.widget.arrayadapter;   

import android.widget.baseadapter;   

import android.widget.button;   

import android.widget.edittext;   

import android.widget.listview;   

import android.widget.radiobutton;   

import android.widget.slidingdrawer;   

import android.widget.spinner;   

import android.widget.textview;   

import android.widget.viewflipper;   

public class testandroid1activity extends activity {   

    /** called when the activity is first created. */   

    private spinner spinner;   

    private viewflipper flipper;   

    private myadapter adapter;   

    private textview text;   

    private slidingdrawer drawer;   

    private gesturedetector detector;   

    @override   

    public void oncreate(bundle savedinstancestate) {   

        super.oncreate(savedinstancestate);   

        setcontentview(r.layout.main);   

        spinner = (spinner) findviewbyid(r.id.spinner);   

        drawer = (slidingdrawer) findviewbyid(r.id.drawer);   

        flipper = (viewflipper) findviewbyid(r.id.flipper);   

        string[] strs = new string[]{"1234567890987654321234556778909876765453234567898765322"};   

        arrayadapter<string> adapter = new arrayadapter<string>(this, r.layout.mytext, strs);   

        spinner.setadapter(adapter);   

        flipper.setlongclickable(true);   

        flipper.setontouchlistener(new ontouchlistener() {   

            @override   

            public boolean ontouch(view v, motionevent event) {   

                // todo auto-generated method stub   

                detector.ontouchevent(event);   

                return false;   

            }   

        });   

         detector = new gesturedetector(this, new ongesturelistener(){   

                @override   

                public boolean ondown(motionevent e) {   

                    //用户轻触屏幕。(单击)    

                    return true;   

                }   

                public boolean onfling(motionevent e1, motionevent e2, float velocityx, float velocityy) {   

                    //用户按下屏幕,快速移动后松开(就是在屏幕上滑动)    

                    //e1:第一个action_down事件(手指按下的那一点)    

                    //e2:最后一个action_move事件 (手指松开的那一点)    

                    //velocityx:手指在x轴移动的速度 单位:像素/秒    

                    //velocityy:手指在y轴移动的速度 单位:像素/秒    

                    int x = (int) (e2.getx() - e1.getx());   

                    if(x>0){   

                        flipper.setinanimation(testandroid1activity.this,r.anim.in_left_right );   

                              flipper.setoutanimation(testandroid1activity.this,r.anim.out_left_right );   

                              flipper.showprevious();                        

                    }else{   

                        flipper.setinanimation(testandroid1activity.this,r.anim.in_right_left );   

                              flipper.setoutanimation(testandroid1activity.this,r.anim.out_right_left );   

                              flipper.shownext();                    

                    }   

                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) {   

                    //用户轻触屏幕,尚末松开或拖动,注意,强调的是没有没有松开或者拖动状态   

                public boolean onsingletapup(motionevent e) {   

                    return false;//用户轻触屏幕后松开。   

            });   

    }   

继续阅读