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;//用户轻触屏幕后松开。
});
}