展会信息港展会大全

[Android] ScrollView滚动到底部和顶部的检测
来源:互联网   发布日期:2015-10-03 10:53:49   浏览:3259次  

导读:1. 源起 很多分页加载的组件都是继承自ScrollView,分页要检查是否滚动到底部,下拉刷新需要检测是否滚动到顶部。2. 代码<SPAN style="F...

1. 源起

很多分页加载的组件都是继承自ScrollView,分页要检查是否滚动到底部,下拉刷新需要检测是否滚动到顶部。

2. 代码

<SPAN style="FONT-FAMILY: Microsoft YaHei; FONT-SIZE: 18px"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

<ScrollView

android:id="@+id/scroll_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scrollbars="vertical" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@android:color/darker_gray"

android:orientation="vertical" >

<TextView

android:layout_width="wrap_content"

android:layout_height="2000dip"

android:text="text" />

</LinearLayout>

</ScrollView>

</RelativeLayout></SPAN>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

<ScrollView

android:id="@+id/scroll_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:scrollbars="vertical" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@android:color/darker_gray"

android:orientation="vertical" >

<TextView

android:layout_width="wrap_content"

android:layout_height="2000dip"

android:text="text" />

</LinearLayout>

</ScrollView>

</RelativeLayout>[java] view plaincopyprint?

<SPAN style="FONT-FAMILY: Microsoft YaHei; FONT-SIZE: 18px">public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final ScrollView view = (ScrollView) findViewById(R.id.scroll_view);

view.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

break;

case MotionEvent.ACTION_MOVE:

if (v.getScrollY() <= 0) {

Log.d("scroll view", "top");

} else if (view.getChildAt(0).getMeasuredHeight() <= v.getHeight() + v.getScrollY()) {

Log.d("scroll view", "bottom");

Log.d("scroll view", "view.getMeasuredHeight() = " + view.getMeasuredHeight()

+ ", v.getHeight() = " + v.getHeight()

+ ", v.getScrollY() = " + v.getScrollY()

+ ", view.getChildAt(0).getMeasuredHeight() = " + view.getChildAt(0).getMeasuredHeight());

}

break;

default:

break;

}

return false;

} });

}

}</SPAN>

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

final ScrollView view = (ScrollView) findViewById(R.id.scroll_view);

view.setOnTouchListener(new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

break;

case MotionEvent.ACTION_MOVE:

if (v.getScrollY() <= 0) {

Log.d("scroll view", "top");

} else if (view.getChildAt(0).getMeasuredHeight() <= v.getHeight() + v.getScrollY()) {

Log.d("scroll view", "bottom");

Log.d("scroll view", "view.getMeasuredHeight() = " + view.getMeasuredHeight()

+ ", v.getHeight() = " + v.getHeight()

+ ", v.getScrollY() = " + v.getScrollY()

+ ", view.getChildAt(0).getMeasuredHeight() = " + view.getChildAt(0).getMeasuredHeight());

}

break;

default:

break;

}

return false;

} });

}

}

3. 说明

检测滚动的时机有很多,这里是在ScrollView外面检测,使用onTouch的MotionEvent.ACTION_MOVE。如果是继承ScrollView,可以在其他回调的时候检测。

v.getScrollY()表示scrollview的上面滚出去的长度。v.getHeight()表示scrollview本身看上去的高度。view.getChildAt(0).getMeasuredHeight()是内容的高度。这里不能用view.getMeasureHeight()。

view.getMeasuredHeight() = 1038

v.getHeight() = 1038

v.getScrollY() = 2962

view.getChildAt(0).getMeasuredHeight() = 4000

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港