天天看點

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;//使用者輕觸螢幕後松開。   

            });   

    }   

繼續閱讀