- 浏览: 1208998 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (353)
- java基础 (40)
- tapestry (16)
- gwt (14)
- ajax (7)
- linux (8)
- ubuntu (18)
- eclipse (6)
- dojo (2)
- javascript (7)
- maven (4)
- 日常生活 (29)
- web2.0 (2)
- jsonrpc (1)
- compass (1)
- lucene (0)
- spring (10)
- cluster (3)
- 数据结构 (2)
- sqlserver (1)
- tomcat (2)
- swing (1)
- servlet (1)
- hibernate (1)
- firefox (1)
- Java-Puzzlers (1)
- Wicket (2)
- mysql (10)
- windows (5)
- Webwork (1)
- struts2 (1)
- Seam (2)
- jboss (1)
- idea (6)
- 分布计算 (3)
- Python-Django (7)
- Hadoop (1)
- 工具 (3)
- Tokyo Tyrant (2)
- Comet (1)
- android (115)
- 音乐 (6)
- cxf (1)
- mqtt (1)
最新评论
-
hesai_vip:
学习了,感谢
gradlew wrapper使用下载到本地的gradle.zip文件安装。 -
imknown:
姚瑶大坏蛋 写道我也遇到了这个,用你这个方法,导致下拉刷新不起 ...
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug -
姚瑶大坏蛋:
我也遇到了这个,用你这个方法,导致下拉刷新不起作用了,你遇到过 ...
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug -
寐语者:
LeaderElection(String zookeeper ...
使用Zookeeper来为你的程序加上Leader Election的功能。 -
fyc0109:
博主, 安装了一部分还是报这个错误!FAILURE: Buil ...
gradlew wrapper使用下载到本地的gradle.zip文件安装。
ListView
OnScrollListener分析
ScrollView 需要覆盖一个新的类LazyScrollView
OnScrollListener分析
ListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE: Log.v("已经停止:SCROLL_STATE_IDLE"); break; case OnScrollListener.SCROLL_STATE_FLING: Log.v("开始滚动:SCROLL_STATE_FLING"); break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: Log.v("正在滚动:SCROLL_STATE_TOUCH_SCROLL"); break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
// 监听listview滚到最底部 mIndexList.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { // 当不滚动时 case OnScrollListener.SCROLL_STATE_IDLE: // 判断滚动到底部 if (view.getLastVisiblePosition() == (view.getCount() - 1)) { isLastisNext++; } break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { } });
ScrollView 需要覆盖一个新的类LazyScrollView
package com.dodowaterfall; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.ScrollView; public class LazyScrollView extends ScrollView { @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); onScrollListener.onAutoScroll(l, t, oldl, oldt); } private static final String tag = "LazyScrollView"; private Handler handler; private View view; public LazyScrollView(Context context) { super(context); } public LazyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public LazyScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } // 这个获得总的高度 public int computeVerticalScrollRange() { return super.computeHorizontalScrollRange(); } public int computeVerticalScrollOffset() { return super.computeVerticalScrollOffset(); } private void init() { this.setOnTouchListener(onTouchListener); handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: if (view.getMeasuredHeight() - 60 <= getScrollY() + getHeight()) { if (onScrollListener != null) { onScrollListener.onBottom(); } } else if (getScrollY() == 0) { if (onScrollListener != null) { onScrollListener.onTop(); } } else { if (onScrollListener != null) { onScrollListener.onScroll(); } } break; default: break; } } }; } OnTouchListener onTouchListener = new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_UP: if (view != null && onScrollListener != null) { handler.sendMessageDelayed(handler.obtainMessage(1), 200); } break; default: break; } return false; } }; /** * 获得参考的View,主要是为了获得它的MeasuredHeight,然后和滚动条的ScrollY+getHeight作比较。 */ public void getView() { this.view = getChildAt(0); if (view != null) { init(); } } /** * 定义接口 * * @author admin */ public interface OnScrollListener { void onBottom(); void onTop(); void onScroll(); void onAutoScroll(int l, int t, int oldl, int oldt); } private OnScrollListener onScrollListener; public void setOnScrollListener(OnScrollListener onScrollListener) { this.onScrollListener = onScrollListener; } }
waterfall_scroll.setOnScrollListener(new LazyScrollView.OnScrollListener() { @Override public void onTop() { // 滚动到最顶端 Log.d("LazyScroll", "Scroll to top"); } @Override public void onScroll() { if (menu_block.getVisibility() == View.VISIBLE) { menu_block.setVisibility(View.GONE); } } @Override public void onBottom() { // 滚动到最低端 // AddItemToContainer(++current_page, page_count); } @Override public void onAutoScroll(int l, int t, int oldl, int oldt) { Log.d("MainActivity", String.format("%d %d %d %d", l, t, oldl, oldt)); // Log.d("MainActivity", "range:" + range); // Log.d("MainActivity", "range-t:" + (range - t)); int scrollHeight = t; scroll_height = waterfall_scroll.getMeasuredHeight(); Log.d("MainActivity", "scroll_height:" + scroll_height); int longHeight = waterfall_scroll.getChildAt(0).getMeasuredHeight(); Log.d("MainActivity", "height:" + longHeight); // 当滚到底部时 马上加载 if (scrollHeight + scroll_height >= longHeight - 40) { if (!isFetchingNow && !noMoreProducts) { new FetchAsyncTask(false).execute(); bottom_bar.setVisibility(View.VISIBLE); } } } }
发表评论
-
安卓各种长知识的技术文章,不断更新
2015-10-27 18:24 752http://blog.udinic.com/2015/09 ... -
发现一个android sdk更新神速的镜像
2015-09-02 11:26 887mirrors.dormforce.net:80 //(栋力无 ... -
gradle项目中怎么集中管理你的依赖库
2015-08-16 11:30 686项目结构 引用root --gradleScript ... -
使用Dexposed为你的安卓应用加上在线修复的能力。
2015-08-11 16:15 6089移动客户端应用相对于W ... -
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug
2015-08-02 00:15 17007在项目中使用了android-Ultra-Pull-To-Re ... -
android有质量的面试题
2015-03-17 14:31 880https://github.com/android-cn/i ... -
提高Android Studio的gradle编译速度。
2015-03-12 14:12 4371发现用Android Studio的make和直接使用comm ... -
gradlew wrapper使用下载到本地的gradle.zip文件安装。
2015-03-12 01:26 15364使用gradlew来build项目时,有时候老是需要下载gra ... -
gradlew wrapper设置代理下载gradle
2015-02-27 18:25 44971. HTTP Only Proxy configuratio ... -
认识mqtt
2015-01-30 11:43 1054http://www.hivemq.com/mqtt-esse ... -
Google的Android性能模式
2015-01-14 14:44 710http://www.infoq.com/cn/news/20 ... -
反对Fragment的理由,顺便叫你如果创建自己的自定义view
2014-12-18 17:08 1081下面这篇文章讲了反对Fragment的理由,顺便叫你如果创建自 ... -
获取status bar的高度
2014-12-16 19:52 1276public static int getStatus ... -
最新的appCompat support library中,actionbar的自定义view不能占用全部的宽度
2014-12-02 23:22 898<style name="AppTheme&q ... -
ScrollTricks实现StickHeader效果
2014-11-06 19:07 1082https://code.google.com/p/roman ... -
AppCompat v21 — Material Design for Pre-Lollipop Devices!
2014-10-23 11:03 842http://android-developers.blogs ... -
国内Android Sdk Manager不能更新的问题。
2014-09-15 15:49 917加hosts 引用203.208.46.146 dl.goo ... -
在Centos上安装android sdk遇到的问题。
2014-09-15 12:00 1350安装好android sdk后, 打包时老是会有下面的问题。 ... -
Android的一些制作图表按钮的工具
2014-09-09 16:36 1488Android Button Maker Android P ... -
DESIGNER'S GUIDE TO DPI
2014-08-29 14:37 439强烈建议美工看看, 对于移动app的多密度屏幕的支持 http ...
相关推荐
解决了ScrollView和listView之间的冲突,简单的实现了微信中聊天页面中拖动的效果,如有不足,请多批评指正!
下拉刷新,滑动到底部自动加载的listview 最后把时候还有下一页传入进去
- 顶部到底部的演示 - 自下而上的演示 - 从左到右的演示 - 右侧演示 - 响应GridView演示 - TreeViewWithChildrenIndent演示 特征: - ListView和GridView和TreeView - 无限的项目 - 项目在不同的大小...
(4) 下拉刷新及滚动到底部加载更多listview Demo (6) Android系统下载管理DownloadManager功能介绍及使用示例 (6) ViewPager多个Page实现画廊效果 (7) 滚动到底部或顶部响应的ScrollView使用 (8) Gallery滑动一页...
延迟加载滚动视图ScrollView的包装器,将启用延迟加载用法将lazy_load_scrollview依赖项添加到您的pubspec.yaml : dependencies : lazy_load_scrollview : 1.3.0 在DART代码,进口package:lazy_load_scrollview/...
您可以在视图内部实现自己的ScrollView,ListView,Multiple View等...,并将自己的视图设置为“ flex:1”。 对于下面的演示屏幕,根据<ScrollView>滚动自动跳转的与该库无关。 它与我自己的实现有关,这是另一个...
InvertibleScrollView是一个React Native滚动视图,可以反转以使内容从底部开始呈现,并且用户必须向下滚动才能显示更多内容。 这是聊天应用程序和命令行终端中的常见设计。 InvertibleScrollView还支持水平滚动...
Trinea Android Demo源码,1) 网络缓存Demo ,(2) 图片缓存Demo,图片SD卡缓存Demo,(3) 下拉刷新及滚动到底部加载更多listview Demo (4) Android系统下载管理DownloadManager功能介绍及使用示例 (5) ViewPager多个...
适用于 Android 的 PullLayout 适用于 Android 的可重用 Pull to Refresh 库。 设置 Maven: ... < artifactId>pulllayout ...支持从顶部下拉和从底部向上拉(或什至两者)。 适用于所有设备的动画滚动。 目
主要包括:缓存(图片缓存、预取缓存、网络缓存)、公共View(下拉及底部加载更多ListView、底部加载更多ScrollView、滑动一页Gallery)及Android常用工具类(网络、下载、Android资源操作、shell、文件、Json、随机数、...