android viewswitcher 切换动画,android ViewSwitcher详解

ViewSwitcher 的作用简单来说就是:在两个视图间转换时显示动画

它的两个子类应该很熟悉,ImageSwitcher:转换图片时增加动画效果;TextSwitcher:转换文字时增加动画效果;其实例见apidemos中ImageSwitcher实例和TextSwitcher实例

但不要忽略ViewSwicher,在一些场合还是很有用的

在android里视图切换是一个很常见的需求,比如说加载view和后台背景,当后台加载数据时,loding view显示,数据View隐藏,加载完成,反向此过程。使用ViewSwicher提供了简单的逻辑,产生更可读的代码。

举个最常见的例子,模拟点击LoadMoreItems按钮或得更多数据。<?xml version="1.0" encoding="utf-8"?>

android:id="@+id/btn_loadmorecontacts"

android:text="Load More Items"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:textAppearance="?android:attr/textAppearanceLarge"

android:minHeight="?android:attr/listPreferredItemHeight"

android:textColor="#FFFFFF"

android:background="@android:drawable/list_selector_background"

android:clickable="true"

android:onClick="onClick" />

大致是这样子

23511K108-0.png

加载中视图:<?xml version="1.0" encoding="utf-8"?>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:minHeight="?android:attr/listPreferredItemHeight">

android:id="@+id/progressbar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true" />

android:text="Loading…"

android:textAppearance="?android:attr/textAppearanceLarge"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_toRightOf="@+id/progressbar"

android:layout_centerVertical="true"

android:gravity="center"

android:padding="10dip"

android:textColor="#FFFFFF" />

23511H3I-1.png

public class ViewSwitcherExample extends ListActivity

implements OnClickListener {

//sample list items

static final String[] ITEMS = new String[]

{ "List Item 1", "List Item 2",

"List Item 3", "List Item 4",

"List Item 5", "List Item 6",

"List Item 7", "List Item 8",

"List Item 9", "List Item 10" };

//the ViewSwitcher

private ViewSwitcher switcher;

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

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//no window title

requestWindowFeature(Window.FEATURE_NO_TITLE);

//create the ViewSwitcher in the current context

switcher = new ViewSwitcher(this);

//footer Button: see XML1

Button footer = (Button)View.inflate(this, R.layout.btn_loadmore, null);

//progress View: see XML2

View progress = View.inflate(this, R.layout.loading_footer, null);

//add the views (first added will show first)

switcher.addView(footer);

switcher.addView(progress);

//add the ViewSwitcher to the footer

getListView().addFooterView(switcher);

//add items to the ListView

setListAdapter(new ArrayAdapter(this,

android.R.layout.simple_list_item_1, ITEMS));

}

@Override /* Load More Button Was Clicked */

public void onClick(View arg0) {

//first view is showing, show the second progress view

switcher.showNext();

//and start background work

new getMoreItems().execute();

}

/** Background Task To Get More Items**/

private class getMoreItems extends AsyncTask {

@Override

protected Object doInBackground(Void… params) {

//code to add more items

//...

try {

Thread.sleep(3000); //only to demonstrate

} catch (InterruptedException e) {

e.printStackTrace();

}

return null;

}

@Override /* Background Task is Done */

protected void onPostExecute(Object result) {

//go back to the first view

switcher.showPrevious();

//update the ListView

}

}

}

当然你也可以使用xml形式构造ViewSwicher,这里加上了系统自带的切换效果@android:anim/slide_in_left和@android:anim/slide_out_right<?xmlversion ="1.0"encoding="utf-8"?>

android:id="@+id/profileSwitcher"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:inAnimation="@android:anim/slide_in_left"

android:outAnimation="@android:anim/slide_out_right">

android:layout_width="wrap_content"

android:layout_height="wrap_content">

android:id="@+id/progressbar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"/>

android:text="Loading…"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_toRightOf="@+id/progressbar"

android:gravity="center"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center_horizontal">

android:text="Finished!"

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:layout_centerVertical="true"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值