先看演示效果:

1  ViewPager类提供了多界面切换的新效果。

新效果有如下特征: 
[1] 当前显示一组界面中的其中一个界面。 
[2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分。

[3]滑动结束后,界面自动跳转到当前选择的界面中

2 介绍里面几个比较重要的方法与接口

1,OnPageChangeListener  ViewPager页面进行切换监听接口  其中我们经常要实现public void onPageSelected(int arg0),public void onPageScrolled(int arg0, float arg1, int arg2),public void onPageScrollStateChanged(int arg0)着三个方面,其中第一个方法是更多的用到;

2,setCurrentItem(int item),来设置跳转到当前的页面;

3,要显示ViewPager,当然还少不了PagerAdapter类,进行适配;其中我们经常也要实现以下方法才可以:public void destroyItem(View arg0, int arg1, Object arg2),public int getCount(),public Object instantiateItem(View arg0, int arg1),public boolean isViewFromObject(View arg0, Object arg1),具体的使用方法等会看例子就ok了

3 例子代码

java代码

package mm.shandong.com.testviewpagergrid;

import android.content.res.TypedArray;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
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.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast; import java.util.ArrayList;
import java.util.List; import mm.shandong.com.testviewpagergrid.entity.Catogray; public class TestViewpagerGridActivity extends AppCompatActivity {
ViewPager viewPagerHomeFragment;
List<Catogray> catogarys;
String[] catogary_names;
int[] catogary_resourceIds;
LayoutInflater layoutInflater;
List<View> gridViews;
RadioGroup radioGroup_index_fragment; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_viewpager_grid);
catogary_names = getResources().getStringArray(R.array.catogary_names);
TypedArray typedArray = getResources().obtainTypedArray(R.array.catogary_resourceIds);
catogary_resourceIds = new int[typedArray.length()];
for (int i = 0; i < typedArray.length(); i++) {
catogary_resourceIds[i] = typedArray.getResourceId(i, 0);
} catogarys = new ArrayList<Catogray>();
viewPagerHomeFragment = (ViewPager) findViewById(R.id.viewPagerHomeFragment);
layoutInflater = getLayoutInflater();
radioGroup_index_fragment =
(RadioGroup) findViewById(R.id.radioGroup_index_fragment);
for (int i = 0; i < catogary_names.length; i++) {
Catogray catogary = new Catogray();
catogary.setName(catogary_names[i]);
catogary.setImage_source(catogary_resourceIds[i]);
catogarys.add(catogary);
}
initViewPager();
} public void initViewPager() { gridViews = new ArrayList<View>();
///定义第一个GridView
GridView gridView1 =
(GridView) layoutInflater.inflate(R.layout.grid_fragment_home, null);
MyGridViewAdapter myGridViewAdapter1 = new MyGridViewAdapter(0, 8);
gridView1.setAdapter(myGridViewAdapter1);
///定义第二个GridView
GridView gridView2 = (GridView)
layoutInflater.inflate(R.layout.grid_fragment_home, null);
MyGridViewAdapter myGridViewAdapter2 = new MyGridViewAdapter(1, 8);
gridView2.setAdapter(myGridViewAdapter2);
///定义第三个GridView
GridView gridView3 = (GridView)
layoutInflater.inflate(R.layout.grid_fragment_home, null);
MyGridViewAdapter myGridViewAdapter3 = new MyGridViewAdapter(2, 8);
gridView3.setAdapter(myGridViewAdapter3);
gridViews.add(gridView1);
gridViews.add(gridView2);
gridViews.add(gridView3); ///定义viewpager的PagerAdapter
viewPagerHomeFragment.setAdapter(new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return gridViews.size();
}
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
// TODO Auto-generated method stub
container.removeView(gridViews.get(position));
//super.destroyItem(container, position, object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(gridViews.get(position));
return gridViews.get(position);
}
});
///注册viewPager页选择变化时的响应事件
viewPagerHomeFragment.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override
public void onPageScrollStateChanged(int position) {
// TODO Auto-generated method stub } @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub } @Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
RadioButton radioButton = (RadioButton)
radioGroup_index_fragment.getChildAt(position);
radioButton.setChecked(true);
}
});
}
///定影GridView的Adapter
public class MyGridViewAdapter extends BaseAdapter {
private int page;
private int count; public MyGridViewAdapter(int page, int count) {
this.page = page;
this.count = count;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return 8;
} @Override
public Catogray getItem(int position) {
// TODO Auto-generated method stub
return catogarys.get(page * count + position);
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder = null;
final Catogray catogary = catogarys.get(page * count + position);
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = layoutInflater.inflate(R.layout.grid_fragment_home_item, null);
viewHolder.grid_fragment_home_item_img =
(ImageView) convertView.findViewById(R.id.grid_fragment_home_item_img);
viewHolder.grid_fragment_home_item_txt =
(TextView) convertView.findViewById(R.id.grid_fragment_home_item_txt);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.grid_fragment_home_item_img.setImageResource(catogary.getImage_source());
viewHolder.grid_fragment_home_item_txt.setText(catogary.getName());
viewHolder.grid_fragment_home_item_img.
setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View view) {
// TODO Auto-generated method stub
Toast.makeText(TestViewpagerGridActivity.this,
catogary.getName(), Toast.LENGTH_SHORT).show();
} });
return convertView;
} }
public class ViewHolder {
public ImageView grid_fragment_home_item_img;
public TextView grid_fragment_home_item_txt;
}
}

  

本人微博:honey_11

Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽

ViewPager+GridView实现横向滑动 仿大众点评的更多相关文章

  1. Android 仿美团网,探索使用ViewPager+GridView实现左右滑动查看更多分类的功能

    看下效果图,自己考虑下自己会如何实现,然后再继续看看作者的实现~ 不记得什么时候,我留意到到美团网首页有使用ViewPager+GridView实现左右滑动查看更多分类的一个功能,感觉它很有趣,于是想 ...

  2. mpvue从一无所有开始仿大众点评小程序

    最近尝试了下用mpvue框架开发小程序,它是基于vue开发的. 官方介绍: mpvue 是一个使用 Vue.js 开发小程序的前端框架.框架基于 Vue.js 核心,mpvue 修改了 Vue.js ...

  3. iOS开发-仿大众点评iPad侧边导航栏

    昨天其实已经写了一篇侧边栏的文章,不过感觉还不是很清晰,这篇文章算是补充吧,iPad上看了大众点评的侧边栏,基本上百分之九十类似,具体效果可参考下图: 对比昨天主要做了两个修改,一个是图片和文字的显示 ...

  4. 慕课网SSM仿大众点评

    目录: 配置部分: 1 配置报错不支持diamond运算符 运行部分: 1 登录的账号密码 2 运行项目是报错session超时 配置部分 1 配置报错不支持diamond运算符 原报错信息如下:id ...

  5. 仿美团ViewPager+GridView

    在接下来我要实现一个仿美团的效果 1.首先写一个登录注册界面用到了,很简单... 这里要提醒各位在调用方法时有set...     也有add....  的方法,为了严谨可以做些正则判断手机号,用se ...

  6. Android 仿美团网,大众点评购买框悬浮效果之修改版

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...

  7. 使GridView可以单行横向滑动

    最近做的练手的小项目中存在一个横向滑动的问题,需要HorizontalScroll中嵌套GridView,但是GridView默认是竖直排放的item,况且HorizontalScroll与GridV ...

  8. Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming),请尊重他人的辛勤劳动成果,谢谢! 随着移动互联网的快速发展,它已经和我们的生活息息相关了,在 ...

  9. ViewPager+GridView实现首页导航栏布局分页效果

    如图是效果图用ViewPager+GridView实现首页导航栏布局分页效果来实现的效果 Demo下载地址:http://download.csdn.net/detail/qq_29774291/96 ...

随机推荐

  1. 外网访问原理分析 - 每天5分钟玩转 OpenStack(105)

    本节我们会将上节创建的 ext_net 连接到 router,并验证内外网的连通性. 更重要的,我们会分析隐藏在表象之下的原理. 将外网连接到 Neutron 的虚拟路由器,这样 instance 才 ...

  2. 优化javaScript代码,提高执行效率

    今天看完书,总结了一下可以如何优化 JavaScript . 1.合并js文件 为优化性能,可以把多个js文件(css文件也可以)合并成极少数大文件.跟十个5k的js文件相比,合并成一个50k的文件更 ...

  3. 【记录】VS2012新建MVC3/MVC4项目时,报:此模板尝试加载组件程序集“NuGet.VisualStudio.Interop...”

    最近电脑装了 VisualStudio "14" CTP,由于把其他版本的 VS 卸掉,由高到低版本安装,当时安装完 VisualStudio "14" CTP ...

  4. 使用 Spring Boot 快速构建 Spring 框架应用--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2 ...

  5. ZOJ Problem Set - 1048 Financial Management

    我承认这是一道水的不能再水的题,今天一下就做到了,还是无耻的帖上来吧 #include <stdio.h> int main() { double sum=0; for(int i=1;i ...

  6. 使用Apache Server 的ab进行web请求压力测试

    参考:http://www.cnblogs.com/spring3mvc/archive/2010/11/23/2414741.html 自己写代码经常是顺着逻辑写下去,写完后run一下,ok就玩完事 ...

  7. VMware Workstation 10.0 正式版官方简体中文下载(附序列号)

    虚拟机界数一数二的王者软件VMWare Workstation 今日推出了最新的VMware Workstation 10.0 版本.该版本最大的更新是加入了简体中文语言,这意味着未来神马汉化包.中文 ...

  8. NSPredicate 的使用

    NSPredicate是什么? NSPredicate 是预测的意思 但是我们常翻译成谓词 它可以干什么? 使用NSPredicate可以定义模糊查询条件 根据一定的条件 我们就可以从一个数组中快速找 ...

  9. 重新编译jdk源码,启用debug信息

    我有一个不知道是好还是不好的习惯,搞不懂的一些玩意儿,喜欢调试然后单步执行看这玩意儿到底是怎么运行的. 今天看到正则表达式的时候,appendReplacement()这个方法怎么也看不明白它是怎么工 ...

  10. Python_Day_01(使用环境为Python3.0+)

    Python 变量与赋值. Python在赋值时时不需要进行定义类型,可直接进行定义赋值. #直接赋值字符串格式 value = "Char" #直接赋值为数字 value = 1 ...