gridview整页翻页的滑动,上滑和下滑,适应各种布局
来源:互联网 发布:护肤品淘宝店名字大全 编辑:程序博客网 时间:2024/05/18 01:53
提前声明:本篇博客是基于电视机顶盒的,全部操作是用遥控器。
转载请注明出处: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) {// 每一个页有多少个完整的itemint 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) {// 每一个页有多少个完整的itemint itemAPage = columnNum * rawInPage;// 求出一共有多少页+1int 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;@Overrideprotected 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() {@Overridepublic 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); } }@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});gv.setOnKeyListener(new OnKeyListener() {@Overridepublic 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);}}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic 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;}}}
2 1
- gridview整页翻页的滑动,上滑和下滑,适应各种布局
- gridview整页翻页的滑动,上滑和下滑
- 带翻页标志的横向滑动GridView
- android GridView 在TV上,上下翻页的时候平滑滑动的实现
- iOS scrollView,tableView,collection滑动改变方向,分别在上滑和下滑中进行操作
- Android - ListView判断滑动到了最底部和最顶部,以及上滑、下滑
- 关于Recycleview滑动事件的监听-包括上下滑
- js判断手指上滑和下滑
- Android实现ScrollView顶部布局上滑缩小,下滑恢复
- 上滑 显示底部 下滑 隐藏顶部 协调者布局
- 下滑隐藏上滑显示的Behavior
- appium基础操作方法--滑动操作(上滑、下滑、左右滑动)--JAVA篇
- 使用ViewFlipper + gridview 实现滑动翻页
- 上拉下滑手势显示隐藏布局
- 浅谈移动端之touch事件--手指的上滑、下滑、左滑和右滑
- ListView上滑和下滑,显示和隐藏Toolbar
- ScrollView滑动到底部继续向上滑和滑动到顶部继续向下滑
- RecyclerView 滑动检测 (上滑 up)(下滑 down)(顶部 top)(底部 bottom)
- js用POST方式页面跳转,避免在地址栏中显示传递参数
- Tomcat结构
- Android-系统换肤的几种方法
- 关于buffer overflow detected 程序崩溃的思考
- selection sort DEMO(linear complexity)
- gridview整页翻页的滑动,上滑和下滑,适应各种布局
- A2W、W2A、A2T、T2A、(USES_CONVERSION)
- 关于ExpandableListView用法的一个简单小例子
- Java正则表达式语法
- Swift数值运算
- Slave failed to initialize relay log info structure from the repository
- springMVC学习笔记-异常处理
- memcache-命令-stats
- ubuntu下搭建gtk+编程环境