Android 水平滚动视图onTouch
我使用的是水平滚动视图,它的工作很好,在我的水平滚动视图中有两个web视图,我的问题是,当你在web视图中向下或向上滚动时,由于水平滚动视图,它会向左或向右移动到另一个web视图,我使用此代码Android 水平滚动视图onTouch,android,Android,我使用的是水平滚动视图,它的工作很好,在我的水平滚动视图中有两个web视图,我的问题是,当你在web视图中向下或向上滚动时,由于水平滚动视图,它会向左或向右移动到另一个web视图,我使用此代码 HorizontalScrollView hv = (HorizontalScrollView)findViewById(R.id.horizontalScrollView2); webView22.setOnTouchListener(new View.OnTouchListener() { p
HorizontalScrollView hv = (HorizontalScrollView)findViewById(R.id.horizontalScrollView2);
webView22.setOnTouchListener(new View.OnTouchListener() {
private String TAG;
public boolean onTouch(View v, MotionEvent event) {
Log.v(TAG,"PARENT TOUCH");
findViewById(R.id.webView22).getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
webView22.setOnTouchListener(new View.OnTouchListener() {
private String TAG;
public boolean onTouch(View v, MotionEvent event)
{
Log.v(TAG,"CHILD TOUCH");
// Disallow the touch request for parent scroll on touch of child view
findViewById(R.id.webView23).getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
当我使用标签时,我得到了一个错误,即字段FragmentActivity.TAG不可见
但是当我添加私有字符串标记时;它走了,无论如何我不确定它是否正确
然而,在我测试过webView22之后,它是很好的,但是如果我想使用水平方向左右移动,它将不起作用
我试着把孩子们的触碰改成按钮返回,但还是一样。我觉得那个标签什么都没做,只是去了
findViewById(R.id.webView22).getParent().requestDisallowInterceptTouchEvent(false);
return false;
我希望有人能提供帮助实际上,这里的情况是水平滚动视图和web视图都使用滚动事件。现在,Android操作系统很难决定这个滚动事件应该转到哪个侦听器 一个选项是使用幻灯片动画,而不是水平滚动视图
fragmentTransaction.setCustomAnimations(R.anim.slide_bottom_in,
R.anim.slide_bottom_out,R.anim.slide_bottom_in,
R.anim.slide_bottom_out);
但这些将再次需要通过一些事件触发。像按钮点击
或者你也可以选择我也有同样的问题,有一些方法,但其中许多都需要更改布局,错误的数据被发送到HorizontalScrollView的子级,大多数情况下,HorizontalScrollView的子级中有子级 所以我做了这样的事情,而不是: val childA=horizontalScrollView.getChild0 childA.setOnTouchListenerthis 做 horizontalScrollView.setOnTouchListenerthis 通过这种方式,你必须计算点击次数和通话次数,但对我来说,它比以前工作得更好,之前的滚动速度慢且有问题
var touchHistory=0
var lastTouchX=0f
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
if (event == null || v == null) return false
when {
event.action == MotionEvent.ACTION_DOWN -> {
touchHistory=0
lastTouchX=event.x
// Screen1=0-480 / Screen2=0-2304 / ScrollPos=0-2304
// Sample: 240 480 - 576 2304 = 240+576 = result
val child = (v as HorizontalScrollView).getChildAt(0)
val sXCurrent = event.x.toDouble()
val sXMax = v.width.toDouble()
val s2XCurrent = scrollX
val s2XMax = child.width
val clickPos = s2XCurrent+sXCurrent
val result = clickPos/s2XMax
// Do something
}
event.action == MotionEvent.ACTION_UP -> {
if(touchHistory==0){
//Click performed, do something
}
//if touchHistory > 0 is currently scrolling and click is omitted
lastTouchX=event.x
touchHistory=0
}
event.action == MotionEvent.ACTION_MOVE -> {
if(event.x!=lastTouchX)touchHistory++ //Check wether is clicking or scrolling
lastTouchX=event.x
}
}
return false
}
最好使用viewpager而不是水平滚动视图我不知道如何在viewpager中使用weview,但在viewpager中使用webview时我会出错谢谢兄弟。是的,我想我会选择查看寻呼机,这很难,如果这符合你的目的,你可以接受这作为一个答案。。。它也将帮助其他人解决同样的问题……我尝试了查看页面,但我的Web视图出现了碎片。但是当我从标签一刷到标签二,然后再刷回标签一,网络视图将从第一个链接重新开始,我不希望它改变,你能帮我一下吗,我会接受这个回答‘这是因为你的片段被重新创建了,看看这个,只有一行代码,你已经解决了……:Kailas,你让我开心,爱你,兄弟,谢谢你你太棒了,不好意思再问你一次,但如果你知道如何解决这个问题,我有一个不同的项目,一个活动我有一个按钮,这个和2个网络视图,我用HorizontalScrollView在它们之间切换,该按钮将处理InterceptTouchEvent,因此当有人触摸该按钮时,InterceptTouchEvent将起作用,当再次触摸时,InterceptTouchEvent将不起作用,我会首先触摸它的工作,但当您润色该按钮时,它将不会停止InterceptTouchEvent这是我尝试的