实现可以滑动的GrildView,类似美团网首页的GrildView功能菜单
首先上实现效果图,不会做动态图,就先凑合着看吧
使用了网上的一个开源控件viewpagerindicator,可以自定义切换时候显示的标记,圆点,或者下划线。
GrildView显示的是手机上的全部app,根据计算好的每页显示的数量来动态添加adapter.
public void initViews() {
final PackageManager packageManager = getPackageManager();
final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
// get all apps
final List<ResolveInfo> apps = packageManager.queryIntentActivities(mainIntent, 0);
// the total pages
final int PageCount = (int)Math.ceil(apps.size()/APP_PAGE_SIZE);
array = new ArrayList<GridView>();
for (int i=0; i<PageCount; i++) {
GridView appPage = new GridView(this);
appPage.setAdapter(new AppAdapter(this, apps, i));
appPage.setNumColumns(4);
array.add(appPage);
}
}
下方显示的切换标记其实两行代码就可以搞定了。
mIndicator = (LinePageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(viewPager);
然后布局文件中要引用这个自定义View
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical" > <android.support.v4.view.ViewPager
android:id="@+id/myviewpager"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:scaleType="fitXY" /> <LinearLayout
android:id="@+id/liner1"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_gravity="center_horizontal"
android:gravity="center_horizontal"
android:orientation="horizontal" ></LinearLayout> <com.viewpagerindicator.LinePageIndicator
android:id="@+id/indicator"
android:layout_width="fill_parent"
android:layout_height="10dp"
android:padding="10dip" /> </LinearLayout>
ViewPage滑动Adapter,这个里面可以自定义需求,比如说,你要实现一个可以无限循环滑动的view,那么你可以把最大数量设为500或者1000更大的然后需要处理好异常,addview跟removeview
package cn.example.adapter; import java.util.List;
import com.viewpagerindicator.IconPagerAdapter;
import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.GridView;
public class MyViewPagerAdapter extends PagerAdapter implements
IconPagerAdapter {
private List<GridView> array; /**
* 供外部调用(new)的方法
*
* @param context
* 上下文
* @param imageViews
* 添加的序列对象
*/
public MyViewPagerAdapter(Context context, List<GridView> array) {
this.array = array;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return array.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
} @Override
public Object instantiateItem(View arg0, int arg1) {
View view = array.get(arg1);
((ViewPager) arg0).addView(array.get(arg1));
return view;
} @Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
} @Override
public int getIconResId(int index) {
// TODO Auto-generated method stub
return 0;
} }
实现GrildView点击事件
package cn.example.adapter; import java.util.ArrayList;
import java.util.List; import cn.example.activity.R;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast; public class AppAdapter extends BaseAdapter {
private List<ResolveInfo> mList;// 定义一个list对象
private Context mContext;// 上下文
public static final int APP_PAGE_SIZE = 8;// 每一页装载数据的大小
private PackageManager pm;// 定义一个PackageManager对象 /**
* 构造方法
*
* @param context
* 上下文
* @param list
* 所有APP的集合
* @param page
* 当前页
*/
public AppAdapter(Context context, List<ResolveInfo> list, int page) {
mContext = context;
pm = context.getPackageManager();
mList = new ArrayList<ResolveInfo>();
// 根据当前页计算装载的应用,每页只装载8个
int i = page * APP_PAGE_SIZE;// 当前页的其实位置
int iEnd = i + APP_PAGE_SIZE;// 所有数据的结束位置
while ((i < list.size()) && (i < iEnd)) {
mList.add(list.get(i));
i++;
}
} public int getCount() {
// TODO Auto-generated method stub
return mList.size();
} public Object getItem(int position) {
// TODO Auto-generated method stub
return mList.get(position);
} public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
} public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.app_item, parent, false);
}
final ResolveInfo appInfo = mList.get(position);
ImageView appicon = (ImageView) convertView
.findViewById(R.id.ivAppIcon);
final TextView appname = (TextView) convertView
.findViewById(R.id.tvAppName);
appicon.setImageDrawable(appInfo.loadIcon(pm));
appname.setText(appInfo.loadLabel(pm));
convertView.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(mContext, "点击了" + appInfo.loadLabel(pm),
Toast.LENGTH_SHORT).show();
}
});
return convertView;
} }
稍后贴出下载连接,CSDN上传出现问题,有需要的可以留邮箱给我。
实现可以滑动的GrildView,类似美团网首页的GrildView功能菜单的更多相关文章
- Android 仿美团网,探索使用ViewPager+GridView实现左右滑动查看更多分类的功能
看下效果图,自己考虑下自己会如何实现,然后再继续看看作者的实现~ 不记得什么时候,我留意到到美团网首页有使用ViewPager+GridView实现左右滑动查看更多分类的一个功能,感觉它很有趣,于是想 ...
- Android 仿美团网,大众点评购买框悬浮效果之修改版
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...
- 后盾网VIP美团网开发(基于HDPHP)(全套38课)
教程简介 本教程由后盾网讲解,共40节,主要介绍了美团网的开发,从需求分析出发,对商铺的建立.购物流程的构建及订单处理等都做了详细的介绍,非常适合做电子商务开发的朋友和同学参考学习使用,完整教程可以在 ...
- 美团网基于机器学习方法的POI品类推荐算法
美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...
- 高级爬虫工程师(Spider)-美团网-拉勾网-最专业的互联网招聘平台
高级爬虫工程师(Spider)-美团网-拉勾网-最专业的互联网招聘平台 高级爬虫工程师(Spider)
- CSS类似微软中国首页的竖向选项卡
效果体验:http://hovertree.com/texiao/css/24/ 源码下载:http://hovertree.com/h/bjaf/hardklps.htm 代码如下: <!DO ...
- 【jQuery小实例】---3 凤凰网首页图片动态效果
---本系列文章所用使用js均可在本博客文件中找到 本页面实现类似于凤凰网首页,鼠标点击新闻,可以在div中显示新闻图片,点击军事显示军事图片的效果.采用的思路是:鼠标悬浮,显示当前div中的内容(图 ...
- 一款仿PBA官网首页jQuery焦点图的切换特效
一款仿PBA官网首页jQuery焦点图的切换特效,非常的简单大方, 在对浏览器兼容性的方面做了不少的功夫.IE6也勉强能过去. 还是一款全屏的焦点图切换特效.大气而清新.很适合简介大方的网站. 下图还 ...
- Vue 旅游网首页开发2 - 首页编写
Vue 旅游网首页开发2 - 首页编写 项目结构 首页开发 效果图 项目开发组件化 将页面的各个部分划分成不同的组件,有助于项目的开发和维护. 项目代码初始化 项目结构修改 1.删除整个 compin ...
随机推荐
- C语言-06-复杂数据类型
一.数组 1> 数组的定义和初始化 定义 ① 数组定义了同种类型数据的集合 ② 定义数组时,数组必须有固定的长度 初始化 ① 如果在定义数组时,初始化数组,数组元素的个数必须是常量 ② 如果不在 ...
- 让div中的table居中
div 标签上写 style="text-align:center" div中的table中写 style="margin:auto;" <table ...
- 敏捷软件开发(3)---COMMAND 模式 & Active Object 模式
COMMAND 模式 command模式非常简单,简单到你无法想象的地方. public interface Command { void execute(); } 这就是一个command模式的样子 ...
- Sping mvc 环境下使用kaptcha 生成验证码
一.kaptcha 的简介 kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kap ...
- python ljust,rjust,center,zfill对齐使用方法
字符串在输出时的对齐:S.ljust(width,[fillchar]) #输出width个字符,S左对齐,不足部分用fillchar填充,默认的为空格. S.rjust(width,[fillcha ...
- html点击按钮 弹出 多选择窗口级联下拉复选
参考代码 代码示例1: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...
- 原始的2文件的makefile错误
从来没系统的看过makefile文档,平时属于复制模板,用完即忘,下午尝试按自己的理解写一个最简单的makefile,含2个.c文件,1个.h文件,费了个把小时,参考别人的文章才弄出来,特记录. ma ...
- nginx如何设置访问跳转到一个固定页面
方法一 server { listen 80 ; server_name www.xxx.com xxx.com; index test.html index.html ...
- Hive remote install mode (mysql) step by step
Prerequisite: Hadoop cluster is avalable; Mysql installed on namenode; Step1: download the latest hi ...
- Hadoop中WritableComparable 和 comparator
1.WritableComparable 查看HadoopAPI,如图所示: WritableComparable继承自Writable和java.lang.Comparable接口,是一个Writa ...