【问题标题】:onTouch event problemonTouch 事件问题
【发布时间】:2011-08-10 07:48:14
【问题描述】:

在我的活动中,我有一个带有 OnTouchListener 的 ScrollView。 此滚动视图包含一些图像视图。

问题是当我触摸一个imageView时,调用了OnTouchListener的onTouch(view,event)函数,但是view参数是scrollView而不是imageView。正常吗? 如何在参数中获得真实的触摸视图?

编辑:

ScrollView scroll = (ScrollView)findViewById(R.id.affichagefiche_scrollview);
touchListener = new OnTouchScrollListener("---");
scroll.setOnTouchListener(touchListener);
private class OnTouchScrollListener implements OnTouchListener{
    public boolean onTouch(View view, MotionEvent event) {
        Log.d("activity", "onTouch: "+view.toString());
    }
}

日志告诉我参数中的视图始终是滚动​​视图,而不是子视图

【问题讨论】:

  • 你能更新你的代码吗

标签: android touch-event ontouchlistener


【解决方案1】:

尝试将 OnTouchListener 绑定到 imageViews 或通过 getX,getY coords 来完成

【讨论】:

  • 我尝试扩展 imageView 以拥有自定义 imageView 并覆盖 onTouch(event) 方法,但之前总是调用 scrollViewOnTouchListener。实际上,由于scrollviewOnTouchListener 的参数视图始终是滚动​​视图而不是子视图,因此我遍历了imageViews 数组以测试我是否使用Region.contains(x,y) 方法触摸了imageView。但是当我向下滚动时,事件的 getX() 和 get(Y) 总是给我屏幕上的 x 和 y,而不是滚动视图中的真实 x 和 y:/
【解决方案2】:

如果你使用 setOnItemClickListener 来获取 ScrollView 的单个 imageView 会更容易。然后使用 onItemClick(AdapterView parent, View view, int position, long id)。

【讨论】:

  • 只有当我在带有适配器的 listView 中时才有效,这里不是这种情况
  • 这一行说“scroll.setOnTouchListener(touchListener);”你在scrollView中设置OnTouchListener,而不是在child中。所以如果你的imageView数量有限,则使用onClickLisener,否则使用gridView。你可以使用水平gridView或垂直gridView。
  • 问题是我需要滚动视图中的 onTOuchListener 来跟踪手指的移动。如果我在滚动上使用 ontouchListener 并在 imageViews 上使用 onClickListener,则单击不会由子级和 ACTION_DOWN 事件处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多