我需要实现以下方案,
这里我有两个horizontalScrollViews,上面的scrollView是一个主菜单,下面的scrollView是一个子菜单。
当我滚动主菜单时,位于中心箭头下方的菜单将在下方滚动视图中显示其子菜单,而从下方滚动视图中,位于中心箭头下方的子菜单显示该子菜单的屏幕。
这是我的要求:
我已经使用HorizontalScrollViews和ViewFlipper实现了它并且它也可以工作,但只有当我慢慢滚动而不是滚动快速时它才会给出正确的结果。
我在onTouch()方法中使用了ACTION_UP事件,所以当我从屏幕释放手指时,它会在那时给我getScrollX()位置,但是在滚动完成/停止时我需要getScrollX()位置。 / p>
这是我的代码: -
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (v.getId()) {
case R.id.mHorizontalScrollViewMain:
if (event.getAction() == KeyEvent.ACTION_UP) {
Log.d("test", " " + hsvUpperTab.getScrollX() + " , "+ mViewFlipper.getChildCount());
getUpperTabScrolled(hsvUpperTab.getScrollX());
}
break;
case R.id.mHorizontalScrollViewSub:
if (event.getAction() == KeyEvent.ACTION_UP) {
Log.d("test1", " " + hsvLowerTab.getScrollX());
getLowerTabScrolled(hsvLowerTab.getScrollX());
}
default:
break;
}
return false;
}
答案 0 :(得分:2)
这是我的答案:
public class ScrollViewCustom extends HorizontalScrollView {
private Runnable scrollerTask;
private int intitPosition;
private int newCheck = 100;
private static final String TAG = "ScrollView";
public interface onScrollStopListner{
void onScrollStoped();
}
private onScrollStopListner onScrollstopListner;
public ScrollViewCustom(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 ( intitPosition - newPosition == 0 ) {
if ( onScrollstopListner != null ) {
onScrollstopListner.onScrollStoped();
}
}else{
intitPosition = getScrollX();
ScrollViewCustom.this.postDelayed(scrollerTask, newCheck);
}
}
};
}
public void setOnScrollStopListner( ScrollViewCustom.onScrollStopListner listner ){
onScrollstopListner = listner;
}
public void startScrollerTask(){
intitPosition = getScrollX();
ScrollViewCustom.this.postDelayed(scrollerTask, newCheck);
}
}
这是活动:
scroll.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if ( event.getAction() == MotionEvent.ACTION_UP ) {
scroll.startScrollerTask();
}
return false;
}
});
scroll.setOnScrollStopListner(new onScrollStopListner() {
@Override
public void onScrollStoped() {
// TODO Auto-generated method stub
Log.d(TAG," "+scroll.getScrollX());
}
});
答案 1 :(得分:1)
您所要做的就是用getScrollX()
替换getScrollY()答案 2 :(得分:0)
我们使用以下方法: 创建一个自定义HorizontalScrollView并覆盖onScrollChanged(int l,int t,int oldl,int oldt)方法,你的代码就在那里。 为了更准确,我们也覆盖了draw方法。