当前位置:网站首页>ViewSwitcher的功能和用法
ViewSwitcher的功能和用法
2022-07-07 15:40:00 【XLMN】
ViewSwitcher的功能和用法
表示视图切换组件,可以将多个view层叠在一起,每次只显示一个组件,当控制从一个view切换到另一个view时,可以指定动画效果,
为了给viewswitcher添加多个组件,使用viewswitcher的setfactory方法设置viewfactory,并由viewfactory创建view
public class MainActivity extends Activity {
// 定义一个常量,用于每屏显示的应用程序数
public static final int NUMBER_PER_SCREEN = 12;
// 代表应用程序的内部类
public static class DataItem {
// 应用程序名称
public String dataName;
// 应用程序图标
public Drawable drawble;
}
// 保存系统所有应用程序的list集合
private ArrayList<DataItem> items = new ArrayList<MainActivity.DataItem>();
// 记录当前正在显示第几屏,
private int sceeNo = -1;
// 保存程序所占的总屏数
private int screenCount;
ViewSwitcher vs;
// 创建Layoutinflater对象
LayoutInflater inflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.viewswitcher);
inflater = LayoutInflater.from(MainActivity.this);
// 创建一个包含40个元素的liset集合,用于模拟包含40个应用程序
for (int i = 0; i < 40; i++) {
String label = "" + i;
Drawable dr = getResources().getDrawable(R.drawable.mia5);
DataItem dt = new DataItem();
dt.dataName = label;
dt.drawble = dr;
items.add(dt);
}
//计算应用程序所占的总屏数
//计算应用程序的能量能够整除NUMBER_PER_SCREEN;
//如果不能整除,总屏数应该是除法的结果加1;
screenCount=items.size()%NUMBER_PER_SCREEN == 0?
items.size()/NUMBER_PER_SCREEN:
items.size()/NUMBER_PER_SCREEN +1;
vs=(ViewSwitcher) findViewById(R.id.viewswitcher);
vs.setFactory(new ViewFactory() {
//返回一个GridView组件
@Override
public View makeView() {
// TODO Auto-generated method stub
//加载组件,实际就是GridView组件
return inflater.inflate(R.layout.slidelistview, null);
}
});
//页面加载时先显示第一个屏
next(null);
}
public void next(View view) {
// TODO Auto-generated method stub
if (sceeNo < screenCount - 1) {
sceeNo++;
// 为ViewSwitcher组件显示过程设置动画
vs.setInAnimation(this, R.anim.slide_in_right);
// 为ViewSwitcher组件隐藏过程设置动画
vs.setInAnimation(this, R.anim.slide_out_left);
// 控制下一屏将要显示的GridView对应的adapter
((GridView) vs.getNextView()).setAdapter(ba);
// 单击右边按钮,显示下一屏
// 学习手势检测后,也可通过手势实现显示下一屏
vs.showNext();
}
}
public void prev(View v) {
// TODO Auto-generated method stub
if (sceeNo > 0) {
sceeNo--;
// 为viewswitcher组件显示过程设置动画
vs.setInAnimation(this, android.R.anim.slide_in_left);
// 为viewswitcher组件隐藏过程设置动画
vs.setInAnimation(this, android.R.anim.slide_in_left);
// 控制下一屏将要显示的gridview对应的adapter
((GridView) vs.getNextView()).setAdapter(ba);
// 单击左边按钮显示上一屏,也可通过手势
// 学习手势检测之后,也可通过手势检测实现上一屏
vs.showPrevious();
}
}
// 该baseAdapter负责为每一屏显示的GridView提供列表项
private BaseAdapter ba = new BaseAdapter() {
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
View view = arg1;
if (arg1 == null) {
// 加载布局文件
view = inflater.inflate(R.layout.labelicon,
null);
}
// 获取布局我呢见中的imageview组件,并为之设置图标
ImageView iv = (ImageView) view
.findViewById(R.id.image01);
iv.setImageDrawable(getItem(arg0).drawble);
// 获取
TextView tv = (TextView) view
.findViewById(R.id.textview);
tv.setText(getItem(arg0).dataName);
return view;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
//
return arg0;
}
@Override
public DataItem getItem(int arg0) {
// TODO Auto-generated method stub
// 根据screenno计算第argo个列表项数据
return items.get(sceeNo * NUMBER_PER_SCREEN + arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
// 如果已经到了最后一屏,且应用程序的数量不能整除number——per_screen
if (sceeNo == screenCount - 1
&& items.size() % NUMBER_PER_SCREEN != 0) {
// 最后一屏显示的程序数为应用程序的数量对number_per_screen求余
return items.size() % NUMBER_PER_SCREEN;
}
// 否则每屏显示的程序数量为number_per_screen
return NUMBER_PER_SCREEN;
}
};
}
<?xml version="1.0" encoding="utf-8"?><!-- 定义一个Viewswitcher -->
<ViewSwitcher
android:id="@+id/viewswitcher"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</ViewSwitcher>
<!-- 定义滚动到上一屏的按钮 -->
<Button
android:id="@+id/but01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:onClick="prev"
android:text="&1t" />
<Button
android:id="@+id/but02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="next"
android:text="&gt" />
<?xml version="1.0" encoding="utf-8"?> <ImageView
android:id="@+id/image01"
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" />
<?xml version="1.0" encoding="utf-8"?> <!-- 设置从右边拖进来的动画,duration指定动画的持续时间 -->
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="100%p"
android:toXDelta="0" />
<?xml version="1.0" encoding="utf-8"?> <!-- 设置从左边拖进来的动画,duration指定动画的持续时间 -->
<translate
android:duration="@android:integer/config_mediumAnimTime"
android:fromXDelta="-100%p"
android:toXDelta="0" />
<?xml version="1.0" encoding="utf-8"?> 边栏推荐
- 百度地图自定义样式向右拖拽导致全球地图经度0度无法正常显示
- Sator launched Web3 game "satorspace" and launched hoobi
- [Seaborn] combination chart: pairplot and jointplot
- Rpcms method of obtaining articles under the specified classification
- Problems encountered in Jenkins' release of H5 developed by uniapp
- L1-028 判断素数(Lua)
- 【可信计算】第十二次课:TPM授权与会话
- mysql使用笔记一
- 【可信计算】第十一次课:TPM密码资源管理(三) NV索引与PCR
- 企业即时通讯软件是什么?它有哪些优势呢?
猜你喜欢
Sator推出Web3游戏“Satorspace” ,并上线Huobi
A tour of grpc:03 - proto serialization / deserialization
【TPM2.0原理及应用指南】 9、10、11章
Several best practices for managing VDI
百度地图自定义样式向右拖拽导致全球地图经度0度无法正常显示
[video / audio data processing] Shanghai daoning brings you elecard download, trial and tutorial
AI来搞财富分配比人更公平?来自DeepMind的多人博弈游戏研究
redis主从、哨兵主备切换搭建一步一步图解实现
Matplotlib绘制三维图形
第3章业务功能开发(安全退出)
随机推荐
Problems encountered in Jenkins' release of H5 developed by uniapp
让保险更“保险”!麒麟信安一云多芯云桌面中标中国人寿, 助力金融保险信息技术创新发展
麒麟信安云平台全新升级!
使用popupwindow創建对话框风格的窗口
2021-06-28
The top of slashdata developer tool is up to you!!!
Jenkins发布uniapp开发的H5遇到的问题
SIGGRAPH 2022最佳技术论文奖重磅出炉!北大陈宝权团队获荣誉提名
管理VDI的几个最佳实践
Is AI more fair than people in the distribution of wealth? Research on multiplayer game from deepmind
What is cloud computing?
鲲鹏开发者峰会2022 | 麒麟信安携手鲲鹏共筑计算产业新生态
[image sensor] correlated double sampling CDs
User defined view essential knowledge, Android R & D post must ask 30+ advanced interview questions
DevOps 的运营和商业利益指南
Devops' operational and commercial benefits Guide
[source code interpretation] | source code interpretation of livelistenerbus
Flask build API service SQL configuration file
DatePickerDialog和trimepickerDialog
浅谈 Apache Doris FE 处理查询 SQL 源码解析