gridview 实现横向分页滑动效果的两种实现方案
2015-09-08 17:21
447 查看
方案一:
楼主在网上找的,能够实现横向滑动,但并没有分页的效果,楼主觉得简单实用就一并贴出来了,下面看代码:
方案二:
楼主根据项目需求自己写了一个,实现分页横向滑动、主要就是将gridview的数据拆分开来,然后丢到viewpager里面,其实也可以用fragment,效果是一样的
![](http://img.blog.csdn.net/20150908172107032?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
好了,两个方案都贴出来,楼主直接从项目中截取的,可能有点乱,单稍微花点时间看下应该能搞定。
楼主在网上找的,能够实现横向滑动,但并没有分页的效果,楼主觉得简单实用就一并贴出来了,下面看代码:
DisplayMetrics dm; private void setValue() { int count = gridAdapter.getCount(); int numColumns = (count % 2 == 0) ? count / 2 : count / 2 + 1; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(numColumns * dm.widthPixels / 5, LinearLayout.LayoutParams.WRAP_CONTENT); gridView.setLayoutParams(params); gridView.setColumnWidth(dm.widthPixels / 5); // gridView.setHorizontalSpacing(hSpacing); gridView.setStretchMode(GridView.NO_STRETCH); gridView.setNumColumns(numColumns); } private void getScreenDen() { dm = new DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); } /** * 初始化gridview */ @SuppressLint("WrongViewCast") private void initGridView(final JSONArray array) { gridAdapter = new HomeMainGridAdapter(getActivity(), array, null); gridView = (GridView) findViewById(R.id.gview); horizontalScrollView = (HorizontalScrollView) findViewById(R.id.scrollView); horizontalScrollView.setHorizontalScrollBarEnabled(false);// 隐藏滚动条 getScreenDen(); setValue(); gridView.setSelector(new ColorDrawable(Color.TRANSPARENT)); gridView.setAdapter(gridAdapter); }
package com.ly.sxh.activity; import android.content.Context; import android.util.AttributeSet; import android.widget.GridView; /** * Created by cruze on 2015/8/6. */ public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
<HorizontalScrollView android:id="@+id/scrollView" android:layout_marginTop="2dp" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="match_parent"> <com.ly.sxh.activity.MyGridView android:id="@+id/gview" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:background="@color/white" android:columnWidth="55dp" android:gravity="center" android:numColumns="5" android:stretchMode="columnWidth" /> </LinearLayout> </HorizontalScrollView>
方案二:
楼主根据项目需求自己写了一个,实现分页横向滑动、主要就是将gridview的数据拆分开来,然后丢到viewpager里面,其实也可以用fragment,效果是一样的
ImageView[] dots; int length; int pageSize; private void initViewPager(final JSONArray parkRows) { RelativeLayout layoutRoute = (RelativeLayout) findViewById(R.id.rl); android.view.ViewGroup.LayoutParams lp = layoutRoute.getLayoutParams(); lp.height = (int)initHeght(); pager = (ViewPager) findViewById(R.id.vpager); length = parkRows.length(); pageSize = length % 10 == 0 ? length / 10 : length / 10 + 1; LinearLayout.LayoutParams margin = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1); margin.setMargins(11, 0, 11, 0); ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup); group.removeAllViews(); //TODO。数据分页s try { dots = new ImageView[pageSize]; View views[] = new View[pageSize]; Context con = getActivity().getApplicationContext(); JSONArray ja = new JSONArray(); List<JSONArray> list = new ArrayList<JSONArray>(); for (int j = 0; j < length; j++) { ja.put(parkRows.get(j)); if ((j) % 10 == 9) { list.add(ja); ja = new JSONArray(); } } if (ja.length() > 0) { list.add(ja); } for (int i = 0; i < pageSize; i++) { ImageView imageView = new ImageView(getActivity()); imageView.setLayoutParams(new LinearLayout.LayoutParams(10, 10)); dots[i] = imageView; if (i == 0) { dots[i].setImageResource(R.drawable.ic_focus); } else { dots[i].setImageResource(R.drawable.ic_normal); } group.addView(imageView, margin); views[i] = LayoutInflater.from(con).inflate(R.layout.gridpager, null); initGridView(views[i], list.get(i)); } HomeGridPageAdapter adapter = new HomeGridPageAdapter(getActivity(), views); pager.setAdapter(adapter); } catch (JSONException e) { e.printStackTrace(); } initListener(); } //TODO private double initHeght() { //获取屏幕宽度 DisplayMetrics dm = new DisplayMetrics(); double densityDpi = dm.density; //获取屏幕信息 getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); //屏幕宽度 int screenWidth = dm.widthPixels; return screenWidth/2.2; } /** * 添加事件监听 */ private void initListener() { pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { boolean isScrolled = false; @Override public void onPageScrollStateChanged(int status) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { if (pager != null) pager.invalidate(); } @Override public void onPageSelected(int index) { setImageBackground(index % length); } }); } private void setImageBackground(int index) { for (int i = 0; i < pageSize; i++) { if (i == index) { dots[i].setImageResource(R.drawable.ic_focus); } else { dots[i].setImageResource(R.drawable.ic_normal); } } } private void initGridView(View view, final JSONArray parkRows) { GridView gridView = (GridView) view.findViewById(R.id.gview); HomeMainGridAdapter adapter = new HomeMainGridAdapter(getActivity(), parkRows, null); gridView.setAdapter(adapter); }
<RelativeLayout android:id="@+id/rl" android:layout_marginTop="10dp" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="160dp"> <android.support.v4.view.ViewPager android:id="@+id/vpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:layout_marginLeft="2dp" android:layout_marginRight="2dp" android:background="@color/white" android:columnWidth="55dp" android:gravity="center" android:numColumns="5" android:stretchMode="columnWidth" /> <LinearLayout android:id="@+id/viewGroup" android:layout_width="wrap_content" android:layout_height="10dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:gravity="center_horizontal|bottom" android:orientation="horizontal"> </LinearLayout> </RelativeLayout>
package com.ly.sxh.adapter; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.util.Log; import android.view.View; import android.view.ViewGroup; /** * Created by cruze on 2015/9/7. */ public class HomeGridPageAdapter extends PagerAdapter { private Context context; private View views[]; public HomeGridPageAdapter(Context context, View views[]) { this.context = context; this.views = views; } @Override public int getCount() { return views.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } /** * 载入图片进去,用当前的position 除以 图片数组长度取余数是关键 */ @Override public Object instantiateItem(ViewGroup container, int position) { try { View view = views[position]; container.addView(view); } catch (Exception e) { Log.e("e_pager", e.toString()); } return views[position]; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(views[position]); } }看下效果图:
好了,两个方案都贴出来,楼主直接从项目中截取的,可能有点乱,单稍微花点时间看下应该能搞定。
相关文章推荐
- 使用 Apache MINA2 实现 Web 系统的消息中间件
- 浏览器Console创建canvas base64 png图片
- SICP 练习 (2.12)解决摘要 :不同的实现时间
- java匿名类工厂方法[java编程思想10.6.1]
- ArrayList调用remove方法需要注意的地方
- 读取文件并转化为String
- KinectV2 Face Basic
- 关于oracle 12c SQL语句执行结果与11g不一致的问题
- 盗梦陀螺攻略5- PID平衡算法(转)
- virtualbox增强功能-VBoxGuestAdditions安装
- HBaseAdmin
- 如何实现双击 home 弹RecentAPP
- 用python爬虫抓站的一些技巧总结 zz
- PyQt4 QPixmap.load/loadFromData 使用py2exe 打包后无法显示JPEG,gif等图片的问题
- document.write的用处
- 2015 9月8日 工作计划与执行
- POJ3335Rotating Scoreboard【半平面交判断多边形是否存在内核】
- 简单分页
- CentOS7下FTP的安装配置
- HDU 3683 Gomoku(五子棋判断结果,模拟题)