Android ViewSwitcher 的功能与用法
来源:互联网 发布:车工计算软件 编辑:程序博客网 时间:2024/05/16 04:14
ViewSwitcher 代表了视图切换组件, 本身继承了FrameLayout ,可以将多个View叠在一起 ,每次只显示一个组件.当程序控制从一个View切换到另个View时,ViewSwitcher 支持指定动画效果.
为了给ViewSwitcher 添加多个组件, 一般通过ViewSwitcher 的setFactory 方法为止设置ViewFactory ,并由ViewFactory为之创建View 即可.
下面通过一个实例来介绍 ViewFactory的用法.(仿Android系统Launcher 界面 实现分屏 左右滑动效果)
import java.util.ArrayList;import android.os.Bundle;import android.app.Activity;import android.graphics.drawable.Drawable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;import android.widget.ViewSwitcher;import android.widget.ViewSwitcher.ViewFactory;public class ViewSwitcherTest extends Activity{// 定义一个常量,用于显示每屏显示的应用程序数public static final int NUMBER_PER_SCREEN = 12;// 代表应用程序的内部类,public static class DataItem{// 应用程序名称public String dataName;// 应用程序图标public Drawable drawable;}// 保存系统所有应用程序的List集合private ArrayList<DataItem> items = new ArrayList<DataItem>();// 记录当前正在显示第几屏的程序private int screenNo = -1;// 保存程序所占的总屏数private int screenCount;ViewSwitcher switcher;// 创建LayoutInflater对象LayoutInflater inflater;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);inflater = LayoutInflater.from(ViewSwitcherTest.this);// 创建一个包含40个元素的List集合,用于模拟包含40个应用程序for (int i = 0; i < 40; i++){String label = "" + i;Drawable drawable = getResources().getDrawable(R.drawable.ic_launcher);DataItem item = new DataItem();item.dataName = label;item.drawable = drawable;items.add(item);}// 计算应用程序所占的总屏数。// 如果应用程序的数量能整除NUMBER_PER_SCREEN,除法的结果就是总屏数。// 如果不能整除,总屏数应该是除法的结果再加1。screenCount = items.size() % NUMBER_PER_SCREEN == 0 ? items.size()/ NUMBER_PER_SCREEN :items.size() / NUMBER_PER_SCREEN+ 1;switcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);switcher.setFactory(new ViewFactory(){// 实际上就是返回一个GridView组件@Overridepublic View makeView(){// 加载R.layout.slidelistview组件,实际上就是一个GridView组件。return inflater.inflate(R.layout.slidelistview, null);}});// 页面加载时先显示第一屏。next(null);}public void next(View v){if (screenNo < screenCount - 1){screenNo++;// 为ViewSwitcher的组件显示过程设置动画switcher.setInAnimation(this, R.anim.slide_in_right);// 为ViewSwitcher的组件隐藏过程设置动画switcher.setOutAnimation(this, R.anim.slide_out_left);// 控制下一屏将要显示的GridView对应的 Adapter((GridView) switcher.getNextView()).setAdapter(adapter);// 点击右边按钮,显示下一屏,也可通过手势检测实现显示下一屏.switcher.showNext(); }}public void prev(View v){if (screenNo > 0){screenNo--;// 为ViewSwitcher的组件显示过程设置动画switcher.setInAnimation(this, android.R.anim.slide_in_left);// 为ViewSwitcher的组件隐藏过程设置动画switcher.setOutAnimation(this, android.R.anim.slide_out_right);// 控制下一屏将要显示的GridView对应的 Adapter((GridView) switcher.getNextView()).setAdapter(adapter);// 点击左边按钮,显示上一屏,也可通过手势检测实现显示上一屏.switcher.showPrevious(); }}// 该BaseAdapter负责为每屏显示的GridView提供列表项private BaseAdapter adapter = new BaseAdapter(){@Overridepublic int getCount(){// 如果已经到了最后一屏,且应用程序的数量不能整除NUMBER_PER_SCREENif (screenNo == screenCount - 1&& items.size() % NUMBER_PER_SCREEN != 0){// 最后一屏显示的程序数为应用程序的数量对NUMBER_PER_SCREEN求余return items.size() % NUMBER_PER_SCREEN;}// 否则每屏显示的程序数量为NUMBER_PER_SCREENreturn NUMBER_PER_SCREEN;}@Overridepublic DataItem getItem(int position){// 根据screenNo计算第position个列表项的数据return items.get(screenNo * NUMBER_PER_SCREEN + position);}@Overridepublic long getItemId(int position){return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent){View view = convertView;if (convertView == null){// 加载R.layout.labelicon布局文件view = inflater.inflate(R.layout.labelicon, null);}// 获取R.layout.labelicon布局文件中的ImageView组件,并为之设置图标ImageView imageView = (ImageView)view.findViewById(R.id.imageview);imageView.setImageDrawable(getItem(position).drawable);// 获取R.layout.labelicon布局文件中的TextView组件,并为之设置文本TextView textView = (TextView) view.findViewById(R.id.textview);textView.setText(getItem(position).dataName);return view;}};}
slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 设置从右边拖进来的动画 android:duration指定动画持续时间 --><translateandroid:fromXDelta="100%p"android:toXDelta="0"android:duration="@android:integer/config_mediumAnimTime" /></set>
slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 设置从左边拖出去的动画 android:duration指定动画持续时间 --><translateandroid:fromXDelta="0"android:toXDelta="-100%p"android:duration="@android:integer/config_mediumAnimTime" /></set>
labelicon.xml
<?xml version="1.0" encoding="utf-8"?><!-- 定义一个垂直的LinearLayout,该容器中放置一个ImageView和一个TextView --><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><ImageView android:id="@+id/imageview"android:layout_width="wrap_content"android:layout_height="wrap_content" /><TextView android:id="@+id/textview"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center" /></LinearLayout>
main.xml
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><!-- 定义一个ViewSwitcher组件 --><ViewSwitcherandroid:id="@+id/viewSwitcher"android:layout_width="fill_parent"android:layout_height="fill_parent" /><!-- 定义滚动到上一屏的按钮 --><Buttonandroid:id="@+id/button_prev"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:onClick="prev"android:text="<" /><!-- 定义滚动到下一屏的按钮 --><Buttonandroid:id="@+id/button_next"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:onClick="next"android:text=">" /></RelativeLayout>
slidelistview.xml
<?xml version="1.0" encoding="utf-8"?><GridView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:numColumns="4" android:layout_height="match_parent"> </GridView>
- Android ViewSwitcher 的功能与用法
- Android ViewSwitcher 的功能与用法
- Android ViewSwitcher 的功能与用法
- Android ViewSwitcher 的功能与用法
- ViewSwitcher的功能与用法View
- <ViewSwitcher>的简单功能与用法
- ViewSwitcher的功能与用法View
- android ViewSwitcher的用法介绍
- ViewAnimator之ViewSwitcher的简单功能和用法(仿Android系统的Launcher界面)
- ViewSwitcher用法
- android中ViewSwitcher的使用
- Android中viewSwitcher的使用
- Android ViewSwitcher
- android ViewSwitcher实现视图的轻松切换
- android 搜索框的功能与用法
- Android中TextSwitcher的功能与用法
- Android通知Notification的功能与用法
- Android ViewFlipper 功能与用法
- C++枚举型变量用法
- fzu——Problem 2091 播放器
- 互联网创业-族谱
- Google C++编程风格指南:格式
- ORACLE的锁机制(一)
- Android ViewSwitcher 的功能与用法
- windows下eclipse搭建android_ndk开发环境
- 【转】不是技术牛人,如何拿到国内IT巨头的Offer
- const成员函数
- Leetcode Palindrome Number
- ViewGroup onInterceptTouchEvent,ViewGroup onTouchEvent,View onTouchEvent执行顺序说明
- 相对路径和绝对路径
- 已知q与n,求等比数列之和: 1+q+q2+q3+q4+…+qn
- Populating Next Right Pointers in Each Node