【问题标题】:HorizontalScrollView onTouchHorizo​​ntalScrollView onTouch
【发布时间】:2014-05-27 06:48:41
【问题描述】:

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

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;
        }
    });

当我使用 TAG 时出现错误提示字段 FragmentActivity.TAG 不可见

但是当我添加私有字符串标签时;它走了,反正我不确定它是否正确,

在我测试它之后,webView22 又好又好,但是如果我想使用水平左右移动,它就行不通了,

我尝试将 CHILD TOUCH 更改为 BUTTON_BACK 但还是一样。我觉得那个标签没有做任何事情它只是去

   findViewById(R.id.webView22).getParent().requestDisallowInterceptTouchEvent(false);
   return false;

希望有人能帮忙

【问题讨论】:

  • 你最好使用 viewpager 而不是 Horizo​​ntalScrollview
  • 当我尝试使用时,我不知道如何在 viewpager 中使用 weview,但是 viewpager 中的 webview 出现错误

标签: android


【解决方案1】:

其实这里的情况是水平滚动视图和网页视图都消耗滚动事件。现在,Android 操作系统将很难决定该滚动事件应该转到哪个侦听器。

对此的一个选项是使用幻灯片动画而不是水平滚动视图。

fragmentTransaction.setCustomAnimations(R.anim.slide_bottom_in,
                                               R.anim.slide_bottom_out,R.anim.slide_bottom_in,
                                               R.anim.slide_bottom_out);

但是这些将再次需要通过某些事件来触发。比如按钮点击。

或者你可以去view pager implementation.

【讨论】:

  • 谢谢兄弟。是的,我想我会去查看寻呼机,这样很难
  • 如果这符合您的目的,您可以接受这个作为答案......它也会帮助其他人遇到同样的问题......
  • 我尝试了视图寻呼机,但我的 webview 在片段中。但是当我从标签一个滑动到标签拖,然后再次滑动回到标签1时,webview将从第一个链接重新开始,我不希望它改变你能帮我吗,我会接受这个作为答案`
  • 这是因为你的片段被重新创建了,看看这个,stackoverflow.com/questions/16272884/… 只需一行代码,你就解决了...... :)
  • Kailas,你让我开心,爱你,兄弟,非常感谢你太棒了,我很害羞再次问你,但如果你知道如何解决这个问题,我有不同的项目和一项活动有一个按钮,这个和 2 个 webview,我使用 Horizo​​ntalScrollView 在它们之间移动,该按钮将处理 InterceptTouchEvent,因此当有人触摸按钮时,InterceptTouchEvent 将起作用,并且当它再次触摸时,InterceptTouchEvent 将不起作用我先做触摸它的工作,但是当您重新触摸按钮时,它不会停止 InterceptTouchEvent 这就是我尝试的方法
【解决方案2】:

我有同样的问题,有一些方法,但其中许多需要更改布局,错误的数据被发送到 Horizo​​ntalScrollView 的子级,主要是在 Horizo​​ntalScrollView 的子级内部有子级的情况下。

所以我做了这样的事情,而不是:

val childA = Horizo​​ntalScrollView.getChild(0) childA.setOnTouchListener(this)

horizo​​ntalScrollView.setOnTouchListener(this)

这样你必须计算点击次数和调用次数,但它对我来说比以前效果更好,之前滚动很慢而且有故障。

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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 2014-07-22
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多