Android ViewSwitcher 的功能与用法
来源:互联网 发布:jquery遍历json集合 编辑:程序博客网 时间:2024/06/05 11:36
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;
- @Override
- public 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组件
- @Override
- public 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()
- {
- @Override
- public int getCount()
- {
- // 如果已经到了最后一屏,且应用程序的数量不能整除NUMBER_PER_SCREEN
- if (screenNo == screenCount - 1
- && items.size() % NUMBER_PER_SCREEN != 0)
- {
- // 最后一屏显示的程序数为应用程序的数量对NUMBER_PER_SCREEN求余
- return items.size() % NUMBER_PER_SCREEN;
- }
- // 否则每屏显示的程序数量为NUMBER_PER_SCREEN
- return NUMBER_PER_SCREEN;
- }
- @Override
- public DataItem getItem(int position)
- {
- // 根据screenNo计算第position个列表项的数据
- return items.get(screenNo * NUMBER_PER_SCREEN + position);
- }
- @Override
- public long getItemId(int position)
- {
- return position;
- }
- @Override
- public 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指定动画持续时间 -->
- <translate
- android: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指定动画持续时间 -->
- <translate
- android: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 -->
- <LinearLayout
- xmlns: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
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <!-- 定义一个ViewSwitcher组件 -->
- <ViewSwitcher
- android:id="@+id/viewSwitcher"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent" />
- <!-- 定义滚动到上一屏的按钮 -->
- <Button
- android: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="<" />
- <!-- 定义滚动到下一屏的按钮 -->
- <Button
- android: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>
转:http://blog.csdn.net/aikongmeng/article/details/14129319
0 0
- 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 功能与用法
- Oracle ODBC Source configuration
- Statement和PreparedStatement批量更新
- Java的对象驻留
- 中方将敦促马方扩大并明确搜寻范围、加大搜寻力度
- 【开源访谈】Firefly 作者 李明 访谈实录
- Android ViewSwitcher 的功能与用法
- 基于opencv的多种边缘算子的边缘检测
- 亚马逊对战阿里云 云计算行业上演大对决
- asp.net 页面编码 设置的几种方法
- Cannot open include file: 'ntddndis.h': No such file or directory
- 大规模分布式系统架构与设计实战
- ZK示例
- 你总是会这样那样的受伤,有时候很痛
- 银行业务调度系统