[英]Get ScrollView Vertical Scrolling Direction
Welcome guys I've scrollview and I want to get the scrolling direction if it's up or down欢迎大家我有滚动视图,我想知道滚动方向是向上还是向下
because I want to hide actionbar tabs when scrolling to the bottom (Like twitter app)因为我想在滚动到底部时隐藏操作栏选项卡(如 Twitter 应用程序)
Tried this but didn't work试过这个但没有用
wrap_layout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
y = event.getY();
break;
case MotionEvent.ACTION_UP:
Log.d("scroll", event.getY() - y + "");
break;
default:
break;
}
return false;
}
});
The easiest way to do is to create a custom ScrollView like this最简单的方法是像这样创建一个自定义的 ScrollView
public class ObservableScrollView extends ScrollView{
public ObservableScrollView(Context context) {
super(context);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
}
and then ovverride the onScrollChanged() method然后覆盖 onScrollChanged() 方法
@Override
protected void onScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
if(scrollY<oldScrollY){
//vertical scrolling down
}else{
//vertical scrolling upp
}
if(scrollX<oldScrollX){
//horizontal scrolling down
}else{
//horizontal scrolling upp
}
}
and finally you can create a custom interface to pass these invents最后你可以创建一个自定义界面来传递这些发明
create custom scrollview;创建自定义滚动视图;
public class CustomScrollView extends ScrollView {
private float mTouchPosition;
private float mReleasePosition;
public interface OnScrollViewListener {
void onScrollChanged(CustomScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY);
void scrollUp();
void scrollDown();
}
private OnScrollViewListener mOnScrollViewListener;
public CustomScrollView(Context context) {
this(context, null, 0);
}
public CustomScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
mOnScrollViewListener.onScrollChanged( this, l, t, oldl, oldt );
super.onScrollChanged(l, t, oldl, oldt);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mTouchPosition = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
mReleasePosition = event.getY();
if (mTouchPosition - mReleasePosition > 0) {
mOnScrollViewListener.scrollDown();
} else {
mOnScrollViewListener.scrollUp();
}
}
return super.onTouchEvent(event);
}
public void setOnScrollViewListener(OnScrollViewListener l) {
this.mOnScrollViewListener = l;
}
}
and add listener;并添加监听器;
yourCustomScrollView.setOnScrollViewListener(new CustomScrollView.OnScrollViewListener() {
@Override
public void onScrollChanged(CustomScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
}
@Override
public void scrollUp() {
Timber.e("SCROLL UP");
}
@Override
public void scrollDown() {
Timber.e("SCROLL DOWN");
}
});
You can just set ScrollListener to your scrollView and handle it as following.您可以将 ScrollListener 设置为您的 scrollView 并按如下方式处理它。
nsv.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
if (!nsv.canScrollVertically(1))
{
// bottom of scroll view
}
//reached at top of scrollView
if (!nsv.canScrollVertically(-1)) {
// top of scroll view
}
//scrolling up and down
if(scrollY<oldScrollY){
//vertical scrolling down
}else{
//vertical scrolling upp
}
if(scrollX<oldScrollX){
//horizontal scrolling down
}else{
//horizontal scrolling upp
}});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.