安卓 ScrollView与NestedScrollView的动态滚动与监听

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34161388/article/details/86476642

2019年第一篇博客,今天就介绍下ScrollView常用的两个方法。

在项目中,特别是新项目,UI经常会让我们根据屏幕的滚动展示不同的内容,或者内容太长,点击某个按钮或者触发某个事件,主动滚动到屏幕底部,这时候就需要我们监听ScrollView(我现在都是用NestedScrollView,不过为了打字方便,用ScrollView代替NestedScrollView,这两个处理其实是一样的,哈哈)的滚动事件和主动滚动事件。

因为Android很多函数都是基于消息队列来同步,所以需要一部操作,
addView完之后,不等于马上就会显示,而是在队列中等待处理,虽然很快,但是如果立即调用fullScroll, view可能还没有显示出来,所以会失败,应该通过handler在新线程中更新。

方法很简单直接列出来了,下面是使用代码,有基础的同学一眼就明白。

Handler handler = new Handler();

handler.post(new Runnable() {

@Override

public void run() {

// 滚动到底部

nestedScrollView.fullScroll(ScrollView.FOCUS_DOWN);

//// 滚动到顶部

// nestedScrollView.fullScroll(ScrollView.FOCUS_UP);

}

});

2.监听scrollview滚动,以调整布局

nestedScrollView.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {

@Override

public void onScrollChange(NestedScrollView nestedScrollView, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

if (scrollY > ScreenUtils.dip2px(getActivity(), 182)) {

ivAddHomePage.setVisibility(View.GONE);

ivPullDown.setVisibility(View.GONE);

llCityName.setVisibility(View.GONE);

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) llSearch.getLayoutParams();

params.width = ScreenUtils.dip2px(getActivity(), 300);

params.gravity = Gravity.CENTER;

llSearch.setLayoutParams(params);

} else {

ivAddHomePage.setVisibility(View.VISIBLE);

ivPullDown.setVisibility(View.VISIBLE);

llCityName.setVisibility(View.VISIBLE);

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) llSearch.getLayoutParams();

params.width = ScreenUtils.dip2px(getActivity(), 213);

llSearch.setLayoutParams(params);

}

}

});

}

猜你喜欢

转载自blog.csdn.net/qq_34161388/article/details/86476642