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