博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现可以滑动的GrildView,类似美团网首页的GrildView功能菜单
阅读量:5820 次
发布时间:2019-06-18

本文共 4925 字,大约阅读时间需要 16 分钟。

首先上实现效果图,不会做动态图,就先凑合着看吧

 

使用了网上的一个开源控件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
apps = packageManager.queryIntentActivities(mainIntent, 0); // the total pages final int PageCount = (int)Math.ceil(apps.size()/APP_PAGE_SIZE); array = new ArrayList
(); for (int i=0; i

下方显示的切换标记其实两行代码就可以搞定了。

mIndicator = (LinePageIndicator)findViewById(R.id.indicator);mIndicator.setViewPager(viewPager);

然后布局文件中要引用这个自定义View

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
array; /** * 供外部调用(new)的方法 * * @param context * 上下文 * @param imageViews * 添加的序列对象 */ public MyViewPagerAdapter(Context context, List
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
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
list, int page) { mContext = context; pm = context.getPackageManager(); mList = new ArrayList
(); // 根据当前页计算装载的应用,每页只装载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上传出现问题,有需要的可以留邮箱给我。

 

转载地址:http://jowdx.baihongyu.com/

你可能感兴趣的文章
vim命令总结
查看>>
HashMap循环方式、效率
查看>>
Oracle安装--简单篇
查看>>
组件化项目搭建(非专业,无聊的一次尝试)
查看>>
Linux基础之文本处理命令
查看>>
java获取kafka主题列表
查看>>
人生没有Ctrl+Z,没有Esc
查看>>
python 2.7 利用smtplib发送、抄送邮件以及发送html表格
查看>>
nginx负载均衡学习
查看>>
我的友情链接
查看>>
社区企业操作系统 CentOS 5.X 相关资源
查看>>
我的友情链接
查看>>
CentOS6.3 yum安装firefox的flash插件
查看>>
QrenCode 命令行下生成二维码
查看>>
linux下mysql Select查询命令及视图
查看>>
windows 修改管理员密码
查看>>
apache工作模式:prefork和worker
查看>>
angular-cli版本升级后错误
查看>>
Android 调试资料相关总结
查看>>
《数据结构与算法分析——c语言描述》读后笔记 5
查看>>