Android-禁用将scrollview作为子级的horizontalscrollview的水平滚动
我现在的工作是为了禁用horizontalscrollview(id:ordermenu)的水平滚动,它将scrollview(我指的是垂直scrollview.scrollview的子级相对论的id yout:category01layout,category02layout,…)作为子级 以下是它在XML中的外观: 水平滚动视图(订单菜单)Android-禁用将scrollview作为子级的horizontalscrollview的水平滚动,android,scrollview,horizontalscrollview,Android,Scrollview,Horizontalscrollview,我现在的工作是为了禁用horizontalscrollview(id:ordermenu)的水平滚动,它将scrollview(我指的是垂直scrollview.scrollview的子级相对论的id yout:category01layout,category02layout,…)作为子级 以下是它在XML中的外观: 水平滚动视图(订单菜单) -线性布局 -滚动视图 -相对位置(类别01布局) -滚动视图 -相对位置(类别02布局) … -滚动视图 -相对位置(类别08布局) 屏幕一次显示一个
-线性布局
-滚动视图
-相对位置(类别01布局)
-滚动视图
-相对位置(类别02布局)
…
-滚动视图
-相对位置(类别08布局)
屏幕一次显示一个类别布局,当我按下prev/next按钮时,它会设置horizontalscrollview.smoothScrollTo()以更改类别布局 因此,当我运行应用程序并滚动时,我的手指同时滚动水平滚动视图和滚动视图。但我不想让我的手指让这两个人都听到声音。我只想ScrollView听我的手指“只垂直滚动”。因为我不知道该怎么做,所以ScrollView只有在我以精确的垂直方向滚动时才能以平滑的方式垂直滚动。否则我的手指也会滚动水平滚动视图,这是我没想到的 那么有没有办法禁用水平滚动而只启用垂直滚动呢 我以前使用过这个方法(创建一个扩展HorizontalScrollView的类)
@覆盖
受保护的无效onScrollChanged(int x,int y,intoldx,intoldy){
if(Math.abs(x-oldx)在我的HorizontalScrollView子类中,我有以下方法,允许我垂直和水平滚动。基本上,如果它检测到垂直滚动,它就会放弃触摸。根据对你的响应程度,使用最小距离
private float SWIPE_VERT_MIN_DISTANCE = 100;
private float startlocation = 0;
private float diffY = 0;
private boolean vertScroll = false;
public boolean onInterceptTouchEvent (MotionEvent ev){
boolean ret = super.onInterceptTouchEvent(ev);
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN:
startlocation = ev.getY();
vertScroll = false;
break;
case MotionEvent.ACTION_MOVE:
diffY = Math.abs(startlocation - ev.getY());
if(diffY > SWIPE_VERT_MIN_DISTANCE)
vertScroll = true;
break;
case MotionEvent.ACTION_UP:
break;
}
if(ret){
if(vertScroll)
return false;
else
return true;
}
return ret;
}
在我的HorizontalScrollView子类中,我有以下方法,允许我同时垂直和水平滚动。基本上,如果它检测到垂直滚动,它将放弃触摸。根据对你的响应程度,使用最小距离
private float SWIPE_VERT_MIN_DISTANCE = 100;
private float startlocation = 0;
private float diffY = 0;
private boolean vertScroll = false;
public boolean onInterceptTouchEvent (MotionEvent ev){
boolean ret = super.onInterceptTouchEvent(ev);
switch(ev.getAction()){
case MotionEvent.ACTION_DOWN:
startlocation = ev.getY();
vertScroll = false;
break;
case MotionEvent.ACTION_MOVE:
diffY = Math.abs(startlocation - ev.getY());
if(diffY > SWIPE_VERT_MIN_DISTANCE)
vertScroll = true;
break;
case MotionEvent.ACTION_UP:
break;
}
if(ret){
if(vertScroll)
return false;
else
return true;
}
return ret;
}
我想你真正想要的是一个简单的例子。顺便说一句,谷歌的Android开发者经常提到以下规则:
不能将滚动视图放在其他滚动视图中
不能将列表视图放在滚动视图中
我想你真正想要的是一个简单的例子。顺便说一句,谷歌的Android开发者经常提到以下规则:
不能将滚动视图放在其他滚动视图中
不能将列表视图放在滚动视图中
除了你的这个问题,我建议你采取一种观点
然后将布局(单击“下一步/上一步”按钮后将更改的布局)放入其中
现在单击“下一步”按钮时,使用动画(如右入/左出)执行viewFlipper.showNext()/viewFlipper.showPrevious()
因此,您可以在布局上显示平滑的scrall。试试看。我是这样做的。它应该可以工作。除了您的这个问题之外,我建议您使用视图翻转器
然后将布局(单击“下一步/上一步”按钮后将更改的布局)放入其中
现在单击“下一步”按钮时,使用动画(如右入/左出)执行viewFlipper.showNext()/viewFlipper.showPrevious()
因此,您可以在布局上显示平滑的scrall。尝试一下。我是这样做的。它应该可以工作。尝试使用视图切换器,在该切换器中,不需要在其他滚动视图中滚动视图,也不需要在滚动视图中滚动列表视图
我希望您能尽快解决问题。尝试使用视图切换器,它不需要在其他滚动视图中滚动视图,也不需要在滚动视图中滚动列表视图
我希望您能尽快解决问题。是的,因此我将代码更改为scrollview inside viewflipper。谢谢~是的,因此我将代码更改为scrollview inside viewflipper。谢谢~