一、概述
ScrollView是一个可以滚动的布局容器,可以向用户展示超出设备屏幕的内容。当拥有很多内容,屏幕显示不完时,就需要通过滚动显示完成内容。
注意事项:ListView不需要使用ScrollView ,因为ListView自身带有滚动功能。TextView同样带有滚动功能,不需要作为ScrollView的子元素,以实现滚动功能。
二、常用设置
2.1滚动条隐藏设置
•标签属性设置: android:scrollbars=“none”
•代码设置: setVerticalScrollBarEnabled(false);
两种方式任选其一即可
2.2子元素全屏设置
1.ScrollView设置 android:fillViewport=“true”
2.子元素的大小设置为 match_parent
三、监听事件配置
1.实现OnTouchListener接口的onTouch()方法,监听所有的touch事件;
3.如果为手指移动事件,获取ScrollView子元素的measuredHeight属性,ScrollView的scrollY和height属性。如果measuredHeight值小于等于scrollY与height的和,则已滑动到底部。
ScrollView视图布局文件
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:scrollbars="none"
tools:context="com.ccshxt.firstproject.activity.ScrollViewActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/scroll_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ccshxt_desc"/>
<ImageView
android:id="@+id/scroll_iv"
android:layout_width="300dp"
android:layout_height="250dp"
android:src="@drawable/ccshxt_logo"/>
</LinearLayout>
</ScrollView>
Activity代码
public class ScrollViewActivity extends AppCompatActivity implements OnTouchListener{
private String TAG = "ScrollViewActivity";
private ScrollView scrollView;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
setContentView(R.layout.activity_scroll_view);
scrollView = (ScrollView) findViewById(R.id.scroll_view);
scrollView.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int mHeight=0,scrollY=0,height=0;
//获取执行的动作类型
switch (event.getAction()){
//手指移动事件
case MotionEvent.ACTION_MOVE:
mHeight = scrollView.getChildAt(0).getMeasuredHeight();
scrollY = scrollView.getScrollY();
height = scrollView.getHeight();
Log.d(TAG, "mHeight: " + mHeight + " scrollY: " + scrollY + " height:" + height);
if(mHeight <= (height + scrollY)){
Toast.makeText(context,"已经到达底部",Toast.LENGTH_SHORT).show();
}
break;
//手指抬起事件
case MotionEvent.ACTION_UP:
break;
//手指落下事件
case MotionEvent.ACTION_DOWN:
break;
}
return false;
}
}