- 浏览: 1225097 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (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 796http://blog.udinic.com/2015/09 ... -
发现一个android sdk更新神速的镜像
2015-09-02 11:26 952mirrors.dormforce.net:80 //(栋力无 ... -
gradle项目中怎么集中管理你的依赖库
2015-08-16 11:30 737项目结构 引用root --gradleScript ... -
使用Dexposed为你的安卓应用加上在线修复的能力。
2015-08-11 16:15 6142移动客户端应用相对于W ... -
解决android-Ultra-Pull-To-Refresh下拉刷新组件中嵌套ViewPager的一个bug
2015-08-02 00:15 17076在项目中使用了android-Ultra-Pull-To-Re ... -
android有质量的面试题
2015-03-17 14:31 956https://github.com/android-cn/i ... -
提高Android Studio的gradle编译速度。
2015-03-12 14:12 4418发现用Android Studio的make和直接使用comm ... -
gradlew wrapper使用下载到本地的gradle.zip文件安装。
2015-03-12 01:26 15479使用gradlew来build项目时,有时候老是需要下载gra ... -
gradlew wrapper设置代理下载gradle
2015-02-27 18:25 45981. HTTP Only Proxy configuratio ... -
认识mqtt
2015-01-30 11:43 1109http://www.hivemq.com/mqtt-esse ... -
Google的Android性能模式
2015-01-14 14:44 775http://www.infoq.com/cn/news/20 ... -
反对Fragment的理由,顺便叫你如果创建自己的自定义view
2014-12-18 17:08 1131下面这篇文章讲了反对Fragment的理由,顺便叫你如果创建自 ... -
获取status bar的高度
2014-12-16 19:52 1316public static int getStatus ... -
最新的appCompat support library中,actionbar的自定义view不能占用全部的宽度
2014-12-02 23:22 956<style name="AppTheme&q ... -
ScrollTricks实现StickHeader效果
2014-11-06 19:07 1139https://code.google.com/p/roman ... -
AppCompat v21 — Material Design for Pre-Lollipop Devices!
2014-10-23 11:03 898http://android-developers.blogs ... -
国内Android Sdk Manager不能更新的问题。
2014-09-15 15:49 982加hosts 引用203.208.46.146 dl.goo ... -
在Centos上安装android sdk遇到的问题。
2014-09-15 12:00 1399安装好android sdk后, 打包时老是会有下面的问题。 ... -
Android的一些制作图表按钮的工具
2014-09-09 16:36 1555Android Button Maker Android P ... -
DESIGNER'S GUIDE TO DPI
2014-08-29 14:37 483强烈建议美工看看, 对于移动app的多密度屏幕的支持 http ...
相关推荐
2. **自定义布局**:创建一个自定义的ScrollView,重写其`onInterceptTouchEvent`和`onTouchEvent`方法,当检测到ListView需要滚动时,将触摸事件传递给ListView。同样,ListView也需要相应地调整事件处理逻辑。 3....
这样,当ListView滚动到顶部时,ScrollView会继续滚动,显示其内部的其他内容,而底部的视图始终保持在屏幕下方。 为了进一步优化,我们可以使用Header和Footer的概念来添加额外的视图。ListView允许我们添加头部和...
通过监听滑动事件,可以在代码中动态判断是应该让ScrollView滚动还是让ListView滚动。例如,可以创建一个滑动手势监听器,当滑动方向符合ScrollView滚动时,处理ScrollView的滚动,否则处理ListView的滚动。 6. **...
例如,当ScrollView滚动到底部时,可以自动加载ListView的更多数据。 现在,让我们看看提供的`ListViewTest`项目。这个项目可能包含了实现ScrollView和ListView共存的一个示例。导入Eclipse后,你可以查看代码,...
2. **自定义ListView**:重写ListView的onMeasure()方法,让其高度适应内容高度,这样ScrollView就不会试图对其进行滚动。 3. **避免嵌套**:尽量避免在同一个布局中同时使用ListView和ScrollView。如果内容可以被...
在Android开发中,ListView和ScrollView是两种常用的布局控件,用于展示可滚动的内容。当我们需要在这些组件的顶部或底部添加固定头(header)或尾(footer)部视图时,有时希望它们在用户滚动屏幕时能有特殊的效果...
例如,当ScrollView滑动到底部时,可以禁用其滚动,让ListView继续接收触摸事件。 7. **使用Headerview和Footerview**: 如果只是想在ListView上方或下方添加可滚动的内容,可以使用ListView的Headerview和...
在ListView中,我们可以在数据达到一定数量或者到底部时,调用addFooterView方法添加这个Footer,并在数据加载完成后移除它。对于GridView,过程类似,只是需要确保Footer视图的宽度和高度与单元格相匹配,以保持...
用户可能无法滚动到ScrollView的底部,或者滚动体验不流畅。 解决这个问题的一种常见方法是使用NestedScrollView替代普通的ScrollView。NestedScrollView是Android Support Library中提供的一个组件,它支持嵌套...
1. **嵌套滚动**: 当一个ScrollView包含一个ListView或者其他的可滚动视图时,就会出现嵌套滚动的情况。Android提供了`NestedScrolling`接口来处理这种情况,它允许子视图将滚动事件传递给父视图,使得两者可以协同...
当ListView滚动到底部或顶部时,切换标志,使得ScrollView开始处理滑动。 4. **使用第三方库** 第三方库如`androidx.core.widget.NestedScrollView`(AndroidX库)和`SwipeRefreshLayout`提供了更好的滑动交互体验...
例如,当ScrollView滚动到底部时,可以让ListView接管滚动,反之亦然。这需要对滚动事件有深入理解,代码量较大,且需要根据实际需求调整。 4. **单独处理ScrollView和ListView**:在某些情况下,可以将ScrollView...
2. **使用Header和Footer**:如果只是想在ListView顶部或底部添加一个固定的ScrollView,可以考虑使用ListView的addHeaderView()和addFooterView()方法,将ScrollView作为头部或尾部添加,这样就不需要嵌套,避免了...
在Android开发中,ScrollView和ListView的嵌套是一个常见的需求,但也是一个挑战,因为它们都是滚动视图,直接组合可能导致冲突和不可预期的行为。本篇文章将详细介绍四种解决ScrollView嵌套ListView问题的方法,...
在Android中,可以重写onScrollChanged()方法来监听ScrollView的滚动变化: ```java public class CustomScrollView extends ScrollView { public CustomScrollView(Context context) { super(context); } ...
当ScrollView和ListView/GridView都尝试处理用户的滑动事件时,可能会导致滚动不顺畅或者无法正常滚动。为了解决这个问题,有以下几种策略: 1. 使用NestedScrollView替代ScrollView。NestedScrollView是Android ...
5. 分离滚动事件:有时,你可能希望在ScrollView和ListView之间进行明确的划分,例如,当ScrollView内容滚动到底部时,才开始滚动ListView。这时,可以监听ScrollView的滚动事件,根据滚动位置动态调整ListView的...
而LoadMoreListView则是在ListView底部添加一个加载指示器,当用户滑动到列表底部时,自动加载更多数据。 接着,GridView是二维列表视图,适用于显示多列元素,如图片墙。与ListView类似,它同样需要Adapter来填充...
有两种主要方法可以实现ScrollView滚动到底部: 1. **使用`scrollTo()`方法**: ```java public static void scrollToBottom(View scroll, View inner) { Handler mHandler = new Handler(); mHandler.post(new...
ScrollView是一个可以包含单个直接子视图的滚动容器,而ListView则用于展示一个可滚动的项目列表。当在Eclipse环境下处理这两种组件的嵌套问题时,开发者可能会遇到一系列挑战。本文将深入探讨这些问题及其解决方案...