gpt4 book ai didi

android - Horizo​​ntalScrollView - 计算滑动后的停止位置

转载 作者:太空宇宙 更新时间:2023-11-03 13:05:36 25 4
gpt4 key购买 nike

对于 Horizo​​ntalScrollView,我如何检测用户离开 View 后滚动何时停止?或者,我如何知道滚动停止时的位置(然后我可以将其与 onScrollChanged 一起使用)。

继承了Horizo​​ntalScrollView。我想要的是让 View 在用户与其交互时表现自然,但当它停止更新其某些 subview 时 - 如果我在 View 滚动时执行此操作,它会在滚动过程中造成小的滞后。

谢谢

最佳答案

我为 Horizo​​ntalScrollView 编写了一个自定义类,它有一个带有滚动停止方法的接口(interface),它在滚动停止时给出 scrollX 位置。这是代码:

public class CustomMCSDHorizontalScroll extends HorizontalScrollView {

private Runnable scrollerTask;
private int initialPosition;
private int newCheck = 100;


public interface onScrollStopedListner{
void onScrollStoped();
}

private onScrollStopedListner onScrollStoped;

public CustomMCSDHorizontalScroll(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
scrollerTask = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
int newPosition = getScrollX();

if ( initialPosition - newPosition == 0 ) {
if ( onScrollStoped != null ) {
onScrollStoped.onScrollStoped();
}
} else {
initialPosition = getScrollX();
CustomMCSDHorizontalScroll.this.postDelayed(
scrollerTask, newCheck);
}

}
};
}

public void setOnScrollStopListner (CustomMCSDHorizontalScroll.
onScrollStopedListner listener) {
onScrollStoped = listener;
}

public void startScrollerTask(){
initialPosition = getScrollX();
CustomMCSDHorizontalScroll.this.postDelayed(scrollerTask, newCheck);
}

}

这是 ontouch() 方法:

@Override
public boolean onTouch(View v, MotionEvent event) {

switch (v.getId()) {
case R.id.mHorizontalScrollViewMain:
if (event.getAction() == KeyEvent.ACTION_UP) {
hsvUpperTab.startScrollerTask();
}
break;
case R.id.mHorizontalScrollViewSub:
if (event.getAction() == KeyEvent.ACTION_UP) {
hsvLowerTab.startScrollerTask();
}
default:
break;
}
return false;
}

这是 onScrollStop() 方法:

hsvLowerTab.setOnScrollStopListner(new onScrollStopedListner() {
@Override
public void onScrollStoped() {
// TODO Auto-generated method stub
getLowerTabScrolled(hsvLowerTab.getScrollX());
}
});

hsvUpperTab.setOnScrollStopListner(new onScrollStopedListner() {
@Override
public void onScrollStoped() {
// TODO Auto-generated method stub
getUpperTabScrolled(hsvUpperTab.getScrollX());
}
});

关于android - Horizo​​ntalScrollView - 计算滑动后的停止位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5295881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com