Android开发基于ViewPager+GridView实现仿大众点评横向滑动功能

先给大家展示下效果图,如果大家大家感觉不错,请参考实现思路及代码

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

新效果有如下特征:

[1] 当前显示一组界面中的其中一个界面。

[2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分。

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

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

1,OnPageChangeListener ViewPager页面进行切换监听接口 其中我们经常要实现public void onPageSelected(int arg0),public void onPageScrolled(int arg0, float arg1, int arg

2),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; } }

以上所述是小编给大家介绍的Android开发仿大众点评基于ViewPager+GridView实现横向滑动功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-10-23 21:41:57

Android开发基于ViewPager+GridView实现仿大众点评横向滑动功能的相关文章

Android开发基于ViewPager+GridView实现仿大众点评横向滑动功能_Android

先给大家展示下效果图,如果大家大家感觉不错,请参考实现思路及代码 1 ViewPager类提供了多界面切换的新效果. 新效果有如下特征: [1] 当前显示一组界面中的其中一个界面. [2] 当用户通过左右滑动界面时,当前的屏幕显示当前界面和下一个界面的一部分. [3]滑动结束后,界面自动跳转到当前选择的界面中 2 介绍里面几个比较重要的方法与接口 1,OnPageChangeListener ViewPager页面进行切换监听接口 其中我们经常要实现public void onPageSelec

安卓-Android开发ListView嵌套GridView,如何更加优化

问题描述 Android开发ListView嵌套GridView,如何更加优化 我在ListView中嵌套GridView,效果实现了,但我在ListView的getView()中是 new GridViewAdapter(``````),也就是说我每一个大的ListView的Item都有去new 一个GridView的适配器,这样对内存不好.可我想通过notifyDataSetChanged()来 改变嵌套的GridView中的数据,一直实现不了...求高手解答··· 解决方案 用viewho

Android开发中ViewPager实现多页面切换效果_Android

ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入"Android-support-v4.jar" 首先必须知道:要使用ViewPager,必须要使用PagerAdapter为其提供数据,也就必须实现下面四个方法: 1, getCount():ViewPager需要显示的页面个数 2,isViewFromObject(View view, Object object):view 是某个位置的页面,Object是

Android开发实现带有反弹效果仿IOS反弹scrollview教程详解_Android

首先给大家看一下我们今天这个最终实现的效果图:   这个是ios中的反弹效果.当然我们安卓中如果想要实现这种效果,感觉不会那么生硬,滚动到底部或者顶部的时候.当然 使用scrollview是无法实现的.所以我们需要新建一个view继承ScrollView package davidbouncescrollview.qq986945193.com.davidbouncescrollview; import android.annotation.SuppressLint; import androi

Android开发中ViewPager实现多页面切换效果

ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包里面,所以在引用时记得在BuilldPath中加入"Android-support-v4.jar" 首先必须知道:要使用ViewPager,必须要使用PagerAdapter为其提供数据,也就必须实现下面四个方法: 1, getCount():ViewPager需要显示的页面个数 2,isViewFromObject(View view, Object object):view 是某个位置的页面,Object是

Android开发使用json实现服务器与客户端数据的交互功能示例

本文实例讲述了Android开发使用json实现服务器与客户端数据的交互功能.分享给大家供大家参考,具体如下: 第一步:写一个远程查询工具类,使用单例模式 /** * 查询远程服务器的工具 * @author chen.lin * */ public class QueryUtils { //private static final String TAG = "CommonUtils"; private static QueryUtils instance; private Share

Android开发之手势检测及通过手势实现翻页功能的方法

本文实例讲述了Android开发之手势检测及通过手势实现翻页功能的方法.分享给大家供大家参考,具体如下: 手势是指用户手指或触摸笔在触摸屏上的连续触碰的行为,比如在屏幕上从左至右划出的一个动作,就是手势,再比如在屏幕上画出一个圆圈也是手势.手势这种连续的触碰会形成某个方向上的移动趋势,也会形成一个不规则的几何图形.Android对两种手势行为都提供了支持: 1. 对于第一种手势行为而言,Android提供了手势检测,并为手势检测提供了相应的监听器. 2. 对于第二种手势行为,Android允许开

jquery实现仿Flash的横向滑动菜单效果代码_jquery

本文实例讲述了jquery实现仿Flash的横向滑动菜单效果代码.分享给大家供大家参考.具体如下: 这是一个仿Flash的jquery滑动菜单,横向,延时效果明显,如果觉得延时太长的话,自己可以修改参数,通过这个菜单主要是想向大家掌握一些jQuery生成动画的技巧,同时这也是jquery强大功能的体现. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-f-flash-style-move-menu-codes/ 具体代码如下: <!

Android开发之实现GridView支付宝九宫格_Android

先给大家展示下关于仿支付宝钱包首页中带有分割线的gridview,俗称九宫格 的效果图,怎么样是不是和你想象的一样啊.在你的预料之中就继续访问以下代码内容吧. 我们都知道ListView设置分割线是非常容易的,设置ListView的分割线颜色和宽度,只需要在布局中定义android:divider和android:dividerHeight属性即可.而GridView并没有这样的属性和方法,那我们改如何来做呢? 小编在做这个效果之前,也参考了其他的一些方案,比如说定义一个自定义的GridView