gridview整页翻页的滑动,上滑和下滑,适应各种布局

原创 2015年07月09日 08:46:09


提前声明:本篇博客是基于电视机顶盒的,全部操作是用遥控器。

转载请注明出处:http://blog.csdn.net/harryweasley/article/details/46811981



在看这篇文章之前,你有必要去了解一下我的上一篇文章,http://blog.csdn.net/harryweasley/article/details/46784667(gridview整页翻页的滑动,上滑和下滑)


本篇文章,是基于上一篇文章的升华。


建立一个类,其中的方法如下所示:

package com.example.test;

import android.view.KeyEvent;


public class GridViewItemOrderUtil {
	

	/**
	 * 判断是否(到某一页的完整最后一行并且点击向下)
	 * 
	 * 
	 * @param size
	 *            总共的项目数目,从1开始
	 * @param columnNum
	 *            列数目,即每一行有多少列,从1开始
	 * @param position
	 *            当前的位置,从0开始
	 * @param rawInPage
	 *            每一页有完整的几行,从1开始
	 * @param keyCode
	 * 
	 * @param event
	 */
	public static boolean allPageDown(int size, int columnNum, int position,
			int rawInPage, int keyCode, KeyEvent event) {
		// 每一个页有多少个完整的item
		int itemAPage = columnNum * rawInPage;
		// 每一个页的最后一行的第一个数字
		int num = itemAPage - columnNum;
		// 求出一共有多少页
		int rawNum = size / itemAPage;
		for (int i = 1; i <= rawNum; i++) {
			for (int j = 0; j < columnNum; j++) {
				// 每行有多少列,进行多少次相加
				if (position == num + itemAPage * (i - 1) + j) {
					if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN
							&& event.getAction() == KeyEvent.ACTION_DOWN) {
						// 如果有相等,则立即返回true,不再进行判断
						return true;
					}
				}
			}

		}
		return false;
	}

	/**
	 * 判断是否(到某一页的第一行并且点击向上按钮)
	 * 
	 * 
	 * @param size
	 *            总共的项目数目,从1开始
	 * @param columnNum
	 *            列数目,即每一行有多少列,从1开始
	 * @param position
	 *            当前的位置,从0开始
	 * @param rawInPage
	 *            每一页有完整的几行,从1开始
	 * @param keyCode
	 * 
	 * @param event
	 */
	public static boolean allPageUp(int size, int columnNum, int position,
			int rawInPage, int keyCode, KeyEvent event) {

		// 每一个页有多少个完整的item
		int itemAPage = columnNum * rawInPage;
		// 求出一共有多少页+1
		int rawNum = size / columnNum + 1;
		for (int i = 1; i <= rawNum; i++) {
			for (int j = 0; j < columnNum; j++) {
				// 每行有多少列,进行多少次相加
				if (position == itemAPage*i + j) {
					if (keyCode == KeyEvent.KEYCODE_DPAD_UP
							&& event.getAction() == KeyEvent.ACTION_DOWN) {
						// 如果有相等,则立即返回true,不再进行判断
						return true;
					}
				}
			}

		}
		return false;
	}

	
}

该类就是适应各种gridview的布局写出来的,里面我写了一些注释。再具体的我就不再讲解了。


mainActivity中进行了如下的改变:


package com.example.test;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnKeyListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity {

	GridView gv;
	/**
	 * 选择的position的值
	 */
	int selected;
	/**
	 * 是否有向上的动画
	 */
	boolean isUp = false;
	/**
	 * 是否有向下的动画
	 */
	boolean isDown = false;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gv = (GridView) findViewById(R.id.gridview);
		gv.setAdapter(new MyBaseAdapter(this));

		gv.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				selected = position;
				if (isDown) {  
                    isDown = false;  
                    gv.smoothScrollToPositionFromTop(position, 0, 1000);  
                }  
                if (isUp) {  
                    isUp = false;  
                    // 让该页的第一行对齐最顶边,这里的3是当前position减去的行数等于当前页的第一行  
                    gv.smoothScrollToPositionFromTop(position - 3, 0, 1000);  
                } 
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {

			}
		});
		
		

		gv.setOnKeyListener(new OnKeyListener() {

			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {


				
				Log.i("tag", "这里进行测试"+selected);
				
				
				isDown=GridViewItemOrderUtil.allPageDown(10, 3,selected, 2, keyCode, event);
				isUp=GridViewItemOrderUtil.allPageUp(10, 3,selected, 2, keyCode, event);

				return false;
			
			}
		});
	}

	class MyBaseAdapter extends BaseAdapter {
		private Context context;
		ArrayList<Integer> list = new ArrayList<Integer>();

		public MyBaseAdapter(Context context) {
			this.context = context;
			for (int i = 0; i < 20; i++) {
				list.add(i);
			}
		}

		@Override
		public int getCount() {

			return list.size();
		}

		@Override
		public Object getItem(int position) {

			return null;
		}

		@Override
		public long getItemId(int position) {

			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder;
			if (convertView == null) {
				convertView = LayoutInflater.from(context).inflate(
						R.layout.item_program, parent, false);
				holder = new ViewHolder();
				holder.imageView = (ImageView) convertView
						.findViewById(R.id.program_image);
				holder.name = (TextView) convertView
						.findViewById(R.id.program_name);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.name.setText("应用" + list.get(position));
			return convertView;
		}

		class ViewHolder {
			ImageView imageView;
			TextView name;
		}

	}

}



gv.setOnKeyListener(new OnKeyListener()方法中,的isDown和isUp方法的获取进行了稍微的改变,其他并没有进行改变。上一篇文章有具体的源码下载,这篇文章我就不上上传了源码了。


gridview 实现横向分页滑动效果的两种实现方案

方案一: 楼主在网上找的,能够实现横向滑动,但并没有分页的效果,楼主觉得简单实用就一并贴出来了,下面看代码: DisplayMetrics dm; private void setValue...
  • u010948188
  • u010948188
  • 2015年09月08日 17:21
  • 3666

gridview 滑动横向分页

  • 2015年05月23日 10:22
  • 189KB
  • 下载

Android GridView横向滚动,分页加载数据

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/51007348始终觉得讲ui效果要先放上效果图,要不让其他人好不容易看完了,发...
  • HarryWeasley
  • HarryWeasley
  • 2016年04月01日 16:38
  • 3881

gridview整页翻页的滑动,上滑和下滑

提前声明:本篇博客是基于电视机顶盒的,全部操作是用遥控器。 转载请注明出处:、、、、 在看本篇文章之前,你需要了解平滑滚动的相关知识。 关于gridview的平滑滚动,你可以查看http://b...
  • HarryWeasley
  • HarryWeasley
  • 2015年07月07日 09:00
  • 3087

GridView控件实现分页功能

初识ASP.NET中的控件,还是折腾了一小会儿,就把我折腾的结果给大家看看: 表格显示数据时网站开发中的一个常见的功能,ASP.NET提供了很多工具在网页中显示表格,GridView控件就是最常见的...
  • wangboxian
  • wangboxian
  • 2012年04月14日 10:37
  • 23451

GridView自身的分页功能的使用方法

用一下,就是把返回的数据集再按GridView中的页大小再拆分一下显示 如返回200条,GridView每页20条,那页便是有10页,每次点上一页或是下一页时,都会去数据库里取回来200条数据,再拆...
  • ty_soft
  • ty_soft
  • 2012年02月24日 19:47
  • 1025

手机端上下滑动换页效果(一)

html> html> head lang="en"> meta charset="UTF-8"> title>title> script type="text/javascr...
  • AIBottle
  • AIBottle
  • 2016年03月29日 11:49
  • 815

Android实现ScrollView顶部布局上滑缩小,下滑恢复

废话不多说,先上效果图: 代码实现也比较简易,我写了一个类继承了ScrollView,并重写onTouchEvent以支持头部布局的变化。 当然,这么做需要手动关联一下 头布局、图片。 上...
  • yanjunhui2011
  • yanjunhui2011
  • 2017年10月18日 16:38
  • 524

GridView高效分页+搜索的完整实现

前言:         公司项目开发,上周的任务是做基础数据的管理。在Sharepoint2010里边内嵌asp.net的aspx页,遇到了各种各样奇葩的问题,因为之前对sharepoint只是...
  • binyao02123202
  • binyao02123202
  • 2013年03月18日 18:07
  • 3941

android Gridview分页实现

  • 2012年11月01日 08:47
  • 189KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:gridview整页翻页的滑动,上滑和下滑,适应各种布局
举报原因:
原因补充:

(最多只允许输入30个字)