1.android 使用GridView 实现加载大量的数据显示。未显示出来的数据可以滑动屏幕让底部的数据显示出来,但是原生态的GridView 并没有很美观平滑的一个动画来滚动数据,因此,我们可以稍做修改就可以实现 类似VST全聚合里面 视频加载也那样的翻页动画效果了。

2.自定义GridView控件代码如下:

/* * @Title: SmoothGridView.java * @Copyright:  Corporation. Ltd. Copyright 1998-2018, All rights reserved * @Description: TODO<请描述此文件是做什么的> * @author: xjp * @data: 2014年8月20日 上午9:50:57 * @version: V1.0 */package com.mktech.localapp;import android.annotation.SuppressLint;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;/** * TODO<请描述这个类是干什么的> *  * @author xjp * @data: 2014年8月20日 上午9:50:57 * @version: V1.0 */public class SmoothGridView extends GridView {private boolean isScroll = false;private int position = 0;//private int iCount;private int iColumns;private int iFirstView;private int iLastView;private int iselecte;private boolean isFirst = true;static int iPageNum = 0;public SmoothGridView(Context context) {super(context);// TODO Auto-generated constructor stub}@SuppressLint("NewApi")public SmoothGridView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub}public SmoothGridView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}// public void setScrollToScrenPosition(int position, boolean isScroll) {// this.position = position;// this.isScroll = isScroll;// }@SuppressLint("NewApi")@Overrideprotected void layoutChildren() {// TODO Auto-generated method stubsuper.layoutChildren();if (isFirst) {iFirstView = getFirstVisiblePosition();iLastView = getLastVisiblePosition();iPageNum = iLastView - iFirstView + 1;iColumns = getNumColumns(); Log.e(VIEW_LOG_TAG, "iPageNum---->>>" + iPageNum);isFirst = false;}// iCount = getCount();iselecte = getSelectedItemPosition(); Log.e(VIEW_LOG_TAG, "iFirstView----->>>" + iFirstView + "iLastView--->>>" + iLastView + "iselecte-->>>" + iselecte);this.setOnKeyListener(new OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (keyCode == KeyEvent.KEYCODE_DPAD_DOWN&& event.getAction() == KeyEvent.ACTION_DOWN) { Log.e(VIEW_LOG_TAG, "iColumns---->>>" + iColumns);if (iselecte % iPageNum >= iPageNum - iColumns&& iselecte % iPageNum < iPageNum) { Log.e(VIEW_LOG_TAG, "iselecte---->>>" + iselecte);position = iselecte + iColumns;isScroll = true;}}if (keyCode == KeyEvent.KEYCODE_DPAD_UP&& event.getAction() == KeyEvent.ACTION_DOWN) {if (iselecte % iPageNum >= 0&& iselecte % iPageNum < iColumns) { Log.e(VIEW_LOG_TAG, "iselecte---->>>" + iselecte);isScroll = true;position = ((iselecte - iPageNum) / iColumns)* iColumns;}}return false;}});if (!isScroll) {return;}isScroll = false; Log.e(VIEW_LOG_TAG, "position---->>>" + position);smoothScrollToPositionFromTop(position, 20, 500);}}
其中关键的地方是使用到了 smoothScrollToPositionFromTop(position, offset, duration); 接口函数。

public void smoothScrollToPositionFromTop (int position, int offset,int duration)

平滑滚动到指定的适配器位置。 指定位置的视图会滚动到相对顶边偏移 offset 像素的位置显示。 如果无法做到(比如该偏移量会使首尾条目超越列表边缘),会滚动到尽量接近的位置。

参数
position 滚动到的位置
offset 滚动结束时,指定 position 条目距离视图顶部的像素数

duration 滚动执行的毫秒数

3.怎么使用? 像使用自定义控件一样使用。

完整工程代码:

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android翻页效果原理实现之翻页的尝试
  5. 通过分析Google的todo-mvp深度解析Android(安卓)MVP架构模式
  6. Android开发中使用sqlite实现新闻收藏和取消收藏的功能
  7. Android人脸检测类FaceDetector
  8. android如何利用基于Http 协议的WebService服务来获取远程数据库
  9. 传智播客--ContentProvider共享数据和ContentResolver的使用,Uri

随机推荐

  1. 写给Android开发的Gradle知识体系
  2. Android 用户界面---XML布局
  3. Android appWidget调查报告 (自己的文章,
  4. Android 如何获取当前Activity实例对象?
  5. android listview仿iphone特效
  6. 为什么我在逐渐冷落HashMap,扶SparseArray
  7. Android多分辨率适配巧妙方法
  8. Android仿人人客户端(v5.7.1)——消息中心
  9. Android 架构组件之一
  10. 当视频网站都支持html5