Android 水平滚动视图onTouch

Android 水平滚动视图onTouch,android,Android,我使用的是水平滚动视图,它的工作很好,在我的水平滚动视图中有两个web视图,我的问题是,当你在web视图中向下或向上滚动时,由于水平滚动视图,它会向左或向右移动到另一个web视图,我使用此代码 HorizontalScrollView hv = (HorizontalScrollView)findViewById(R.id.horizontalScrollView2); webView22.setOnTouchListener(new View.OnTouchListener() { p

我使用的是水平滚动视图,它的工作很好,在我的水平滚动视图中有两个web视图,我的问题是,当你在web视图中向下或向上滚动时,由于水平滚动视图,它会向左或向右移动到另一个web视图,我使用此代码

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这是我尝试的