0 0

如何判断ScrollView滑动到最底部?10

ListView可以添加监听器OnScrollListener来判断是否缓动到了底部。
但是ScrollView没有该功能,那如何判断呢?求教中。。。

我要做的效果是:当ScrollView滑动到最底部时需要请求下一页的数据。

问题补充:
Rainbow702 写道
调用函数判断如下:
if(getScrollY() + getHeight() >=  computeVerticalScrollRange())
{
        Log.d(TAG,"------滚动到最下方------");
}
else
{
        Log.d(TAG,"没有到最下方");
}

我因该放在哪个事件中判断呢?
我滑动后直到ScrollView停止,而ScrollView没有滑动停止监听功能的,感觉沒地方写。阁下是如何处理的?

问题补充:
Rainbow702 写道
给你找了个示例,上面写得很全:
http://disanji.net/2011/02/19/solve-viewflipper-scrollview-flip-problem/

我以前想实现的功能是,让 ScroolView 滚动至最下面,直接使用类中的 fullScroll() 方法就可以的。

scrollView.fullScroll(View.FOCUS_DOWN)的话是自动滚到最底部吧,还有scrollView.computeVerticalScrollRange()这个方法是Protected的,不是public的,我引用不到。呵呵

问题补充:ListView可以添加监听器OnScrollListener来判断是否缓动到了底部。
但是ScrollView没有该功能,也就是说ScrollView.setOnScrollListener()是不可以的!

问题补充:好像if(scrollView.getScrollY() + scrollView.getHeight() >=  scrollView.computeVerticalScrollRange())不对的嘛。
我打印出来:
scrollView.getHeight()是固定值410
crollView.computeVerticalScrollRange()也是固定值320
这样的话无论如何条件都是成立的。

问题补充:我加了GestureDetector可以无视,主要看public int computeVerticalScrollRange()
public class MyScrollView extends ScrollView {

	GestureDetector gestureDetector;
	
	public MyScrollView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	public MyScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
	public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}
	
	public int computeVerticalScrollRange(){
		return super.computeHorizontalScrollRange();
	}
	public int computeVerticalScrollOffset(){
		return super.computeVerticalScrollOffset();
	}
	public void setGestureDetector(GestureDetector gestureDetector) {
		this.gestureDetector = gestureDetector;
	}
 
	@Override
	public boolean onTouchEvent(MotionEvent event) {
	    super.onTouchEvent(event);
	    return gestureDetector.onTouchEvent(event);
	}
 
	@Override
	public boolean dispatchTouchEvent(MotionEvent ev){
	    gestureDetector.onTouchEvent(ev);
	    super.dispatchTouchEvent(ev);
	    return true;
	} 

问题补充:
scrollViewListener是OnScrollChangedListener对象?它没有onScrollChanged(this, x, y, oldx, oldy);方法的啊。
如果是OnScrollListener对象也没有该方法的!

问题补充:给个具体的类吧,你说的那个scrollViewListener到底什么对象?

问题补充:我看了上面一位仁兄的:
@Override 
    protected void onScrollChanged(int x, int y, int oldx, int oldy) { 
        super.onScrollChanged(x, y, oldx, oldy); 
        if (scrollViewListener != null) { 
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); 
        } 
    } 
但是scrollViewListener是什么对象?不是OnScrollListener,也不是OnScrollChangedListener对象,怪怪。

问题补充:试了,这样的话肯定变化了

问题补充:不对,我发现还是320!

我滚动到最底部,打印的数据为:
getScrollY()=590
getHeight()=410
computeVerticalScrollRange()=320

我感觉 if(getScrollY() + getHeight() >=  computeVerticalScrollRange())
三者之间的关系有问题。
2011年9月01日 09:47

10个答案 按时间排序 按投票排序

0 0

采纳的答案

调用函数判断如下:

if(getScrollY() + getHeight() >=  computeVerticalScrollRange())
{
        Log.d(TAG,"------滚动到最下方------");
}
else
{
        Log.d(TAG,"没有到最下方");
}

2011年9月01日 09:53
0 0

的确,我看他的 scrollView.setScrollViewListener(this)  ,然后去找  setScrollViewListener() 这个方法,也没找到。
PS:我上面提的那个建议不知道你有没有试过

引用
所以,你试着在你的scrollView上多加几个组件(如果你是在ScrollView中嵌入了一个TextView的话,那就在其中输入一些字符),看看返回值还是不是你说的 320?

2011年9月01日 17:58
0 0

引用
它没有onScrollChanged(this, x, y, oldx, oldy);方法的啊

onScrollChanged() 方法是 View() 类里的,ScrollView 应该是继承了这个方法

2011年9月01日 17:48
0 0

引用

protected int computeVerticalScrollRange ()

The scroll range of a scroll view is the overall height of all of its children.
Returns
    the total vertical range represented by the vertical scrollbar. The default range is the drawing height of this view.

上面是这个API的说明,第一句说明了这个方法的返回值应该是所有子组件的高度的和。所以,你试着在你的scrollView上多加几个组件(如果你是在ScrollView中嵌入了一个TextView的话,那就在其中输入一些字符),看看返回值还是不是你说的 320?

2011年9月01日 16:10
0 0

晕之前看错了
继承scrollview的时候
滚动时候的监听
 @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy) {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null) {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }
     //这个获得总的高度
    public int getTotalVerticalScrollRange() {
        return computeVerticalScrollRange();
    activity的时候
  scrollView.setScrollViewListener(this)
在这个监听的过程中 当中 getScrollY()=getTotalVerticalScrollRange()这样用该就是到底部了。


2011年9月01日 15:50
0 0

引用

scrollView.getHeight()是固定值410
crollView.computeVerticalScrollRange()也是固定值320

这个不会吧,你把你继续自 ScrollView 的类的代码贴个出来看看呢

2011年9月01日 13:41
0 0

scrollView.computeVerticalScrollRange()这个方法是Protected的,不是public的,我引用不到。
对,这个比较恶心。不过,还是有办法的,你可以创建一个类继承ScrollView, 新建一个方法,把这个方法设置成public的,在里面调用computeVerticalScrollRange(), 一切问题都解决了。

2011年9月01日 11:13
0 0

实现原理: 通过手指的滑动,判断数据大小 然后动态改变数据,

firstVisbleItem 第一个可见的item visibleItemCount 可见的Item个数 totalItemCount 总的个数
	 * lastItem 可见状态中,最后一个item


	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {


	lastItem = firstVisibleItem + visibleItemCount - 1;
}
/**
	 * 如果视图正在滚动,此方法将被调用之前,滚动下一帧呈现。特别是,它会被调用之前调用getView
	 */
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		if (lastItem == adapter.getCount()
				&& scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
			nowpage++;
		。。。。。。
			adapter.notifyDataSetChanged();
		}
	}

2011年9月01日 10:50
0 0

给你找了个示例,上面写得很全:
http://disanji.net/2011/02/19/solve-viewflipper-scrollview-flip-problem/

我以前想实现的功能是,让 ScroolView 滚动至最下面,直接使用类中的 fullScroll() 方法就可以的。

2011年9月01日 10:32
0 0

引用
我因该放在哪个事件中判断呢?

你可以定义一个手势响应类来处理响应事件,覆写其 onScroll() 方法,把上面的代码放到其中即可

2011年9月01日 10:30

相关推荐

    判断ScrollView是否滑动到最下边或者最上边

    这个代码可以判断ScrollView是否滑动到了最下边或者最上边,同理,HorizontalScrollView也可以判断是否滑动到最右边或者最左边。使用方法就是直接用这个自定义控件并实现里面的OnScrollListener就可以了,会自动复写...

    scrollview的滑动监听底部以及横向滑动

    而在某些复杂场景下,我们还可能需要实现ScrollView的横向滑动,并在滑动到底部或横向滑动到边缘时触发相应的事件。这个"scrollview的滑动监听底部以及横向滑动"的示例(ScrollviewBottomDemo)就是为了演示如何实现...

    Android中控制和禁止ScrollView自动滑动到底部的方法

    在某些情况下,比如ScrollView嵌套了GridView或ListView等可滚动的控件,当数据加载或刷新时,ScrollView可能会自动滚动到最底部。这是因为在加载过程中,子视图(childView)可能获得了焦点并自动滚动。为了解决这...

    SwiftUI之判断ScrollView是否滑动到底部及ChildSizeReader的使用文章示例代码

    首先,我们来看如何判断`ScrollView`是否滑动到底部。SwiftUI并没有直接提供一个内置的方法来检测这一点,但我们可以通过监听`GeometryReader`的偏移量来实现。`GeometryReader`可以提供其占据的空间大小和位置信息...

    解决scrollView和listview滚动冲突,实现listview滑动到顶端和底部之后还能拖拽一定的距离,松开后返回

    1. **监听滑动状态**:通过重写ListView的`onScroll`和`onScrollStateChanged`方法,判断当前是否滑动到顶部或底部。 2. **计算额外的拖拽距离**:在滑动到底部或顶部时,记录当前的滑动位置,计算出允许用户额外...

    Android ScrollView自动滑动

    2. 用户交互:当自动滑动到最底部时,确保用户仍能手动滚动。可以监听ScrollView的滑动事件,防止不必要的自动滑动。 3. 兼容性:测试不同设备和Android版本,确保自动滑动功能在各种情况下都能正常工作。 总结,...

    Android中使用ScrollView实现滑动到底部显示加载更多

    总之,Android中使用ScrollView实现滑动到底部显示加载更多的功能,主要是通过监听ScrollView的触摸事件,结合getMeasuredHeight和getHeight来判断是否达到底部,然后根据判断结果执行相应的操作。这个过程涉及到对...

    ScrollView滑动悬停效果

    ScrollView滑动悬停效果是指在ScrollView滚动过程中,某个特定视图(如一个按钮或图像)始终保持在屏幕可见区域内,即使ScrollView本身在滚动。这种效果可以增加用户体验,因为它使用户能够始终关注到关键元素,而...

    Android-滑动响应工具类目前支持RecyclerView和ScrollView的滑动响应

    2. **ScrollView滑动响应**: ScrollView是Android中的基础滚动视图,可以包含一个或多个子视图。ScrollRespondUtils同样支持ScrollView,使得开发者可以轻松地添加滑动事件监听,例如在ScrollView滚动到底部时触发...

    关于多个ListView与ScrollView滑动冲突的一个简单处理方法

    本文将详细讲解如何解决多个ListView与ScrollView滑动冲突的简单处理方法。 首先,理解冲突的本质:ScrollView是一个可以容纳多个View的容器,它可以垂直滚动。而ListView本身就是可滚动的列表,内部已经处理了滑动...

    SCrollView自动滚动视图

    当检测到ScrollView滚动到底部或顶部时,我们会将contentOffset重置为初始位置,这样用户就会看到内容重新开始滚动,形成循环。 UIPageControl是另一个在这个项目中可能用到的UI控件。UIPageControl通常配合...

    android scrollView 拉到最低和最顶端 反弹效果

    在Android开发中,ScrollView是常用的...总的来说,实现Android ScrollView的拉到最低和最顶端的反弹效果,主要涉及滚动监听、动画控制和视图操作。通过自定义监听器和动画,开发者可以为用户带来更丰富的交互体验。

    新版闪记ScrollView垂直滑动框架

    传统的ScrollView通常只能单向滚动,而新版闪记ScrollView支持无边界滑动,即当用户滑动到内容的顶部或底部时,可以无缝地继续滑动,形成一个循环的效果。这在展示无限列表或者需要回弹效果的场景中非常有用,例如在...

    cocos2d-x中ScrollView的实现

    // 处理滚动到底部的逻辑 break; // 其他事件处理... } }); ``` 四、动态添加和删除内容 在实际应用中,我们可能需要动态地添加或删除`ScrollView`中的内容节点。这可以通过以下方式实现: 1. 添加节点:`...

    Super ScrollView for UGUI 2.2.2一款unity3d非常强大的滑动制作插件

    - 顶部到底部的演示 - 自下而上的演示 - 从左到右的演示 - 右侧演示 - 响应GridView演示 - TreeViewWithChildrenIndent演示 特征: - ListView和GridView和TreeView - 无限的项目 - 项目在不同的大小...

    Android中自定义ScrollView的滑动监听事件

    - 滑动监听可能需要处理边缘滑动(例如,当滚动到底部或顶部时),这需要额外的逻辑判断。 - 注意滑动事件可能会与其他手势识别冲突,如点击事件,需要合理地处理这些事件。 通过以上步骤,我们可以成功地在...

    android scrollview 滑动到顶端或者指定位置的实现方法

    本文将详细讲解如何实现ScrollView滑动到顶端或指定位置的功能。 首先,ScrollView的`scrollTo(int x, int y)`方法是直接设置滚动条位置的,其中x表示水平方向的偏移量,y表示垂直方向的偏移量。然而,在Activity的...

    android ScrollView和ListView固定底部

    首先,将固定视图(如底部按钮)放在最外层布局的底部,然后将ScrollView作为其直接子视图。在ScrollView内部,再放置一个LinearLayout(或其他适当的布局),并将ListView作为LinearLayout的子视图。这样,当...

    ScrollView嵌套ListView滑动冲突的解决方法

    在ListView的`onTouchEvent`中,如果检测到上滑或下滑,且ListView已经滑动到底部或顶部,返回false,将事件交给父视图(ScrollView)处理。 3. **使用NestedScrollView替换ScrollView** 自Android Design Support...

Global site tag (gtag.js) - Google Analytics