ViewSwitcher仿安卓系统Launcher界面
来源:互联网 发布:centos 移动目录 编辑:程序博客网 时间:2024/05/16 04:38
java代码
package com.example.zhang.viewswitchertest;import android.app.Activity;import android.graphics.drawable.Drawable;import android.os.Bundle;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 java.util.ArrayList;public class MainActivity 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.activity_main); inflater = LayoutInflater.from(MainActivity.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); } //类似于if else // 计算应用程序所占的总屏数 // 如果应用程序的数量能整除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 ViewSwitcher.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; } //获取数据集里面与指定postion索引对应的数据项 @Override public DataItem getItem(int position) { // 根据screenNo计算第position个列表项的数据 return items.get(screenNo * NUMBER_PER_SCREEN + position); } //获取在列表中与指定索引相对应的Id @Override public long getItemId(int position) { return position; } //获取视图 @Override public View getView(int position , View convertView, ViewGroup parent) { View view = convertView; if (convertView == null)//采用这种方法,通过converView,如果缓存中没有View,怎创建View,避免浪费,提升性能 { // 加载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; } };}
xml代码
<!--content_main.xml--><?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="com.example.zhang.viewswitchertest.MainActivity" tools:showIn="@layout/activity_main"> <ViewSwitcher android:id="@+id/viewSwitcher" android:layout_width="match_parent" android:layout_height="match_parent"/> <Button android:id="@+id/prev" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:onClick="prev" android:text="<"/> <Button android:id="@+id/next" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="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><!--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><!--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><!--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>
效果
0 0
- ViewSwitcher仿安卓系统Launcher界面
- ViewAnimator之ViewSwitcher的简单功能和用法(仿Android系统的Launcher界面)
- 仿android系统Launcher界面
- Android界面编程之ViewSwitcher
- ViewSwitcher
- ViewSwitcher
- [Android]笔记20:ViewAnimator-仿android系统launcher界面
- 求指教,Android 如何调用系统主界面Launcher应用程序列表界面
- launcher界面修改
- 如何刷新Launcher界面
- Navigation Bar 修改问题(三) ------- 系统重启Launcher界面显示Nv Bar
- Navigation Bar 修改问题(三) ----- 系统重启Launcher界面显示Nv Bar
- Launcher 界面UI绑定过程
- 写一个 android launcher界面
- Launcher界面的颜色设置
- 定制android主界面。让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一的Launcher.
- 定制android主界面。让你自己写的Android的Launcher成为系统中第一个启动的,也是唯一的Launcher.
- Android4.1 Launcher界面添加快捷图标
- 【jQuery】使用attr()方法控制元素的属性
- Hibernate关联映射(注解版)
- Android 单例模式的问题
- 1022
- Android 4.0以后屏蔽Home键和返回键
- ViewSwitcher仿安卓系统Launcher界面
- OC 学习 第四节
- Activity与Fragment之间的通信详解
- sftp安装
- 用c++写一个顺序表的简单操作程序
- 调音师在演奏中的重要性
- HDFS数据流
- C++11: deleted copy control
- 使用Mahout搭建推荐系统之入门篇-Mahout源码初探