【问题标题】:Android Gallery View Scrolling problem when onClickListener for items given给定项目的onClickListener时Android Gallery View Scrolling问题
【发布时间】:2011-07-07 21:21:27
【问题描述】:

我在我的应用中使用了图库。

因为我在每个画廊项目中有两张这样的图片

每张兔子和老鼠的图片都被合并为一个画廊项目。

因此,我为这两个图像都提供了 onclickListener,但如果我这样提供,我将无法通过触摸这些图像来滚动...如果我删除单个图像的 onClickListener,我就可以滚动。

如何归档每张图片的滚动和点击。

【问题讨论】:

  • 也许你应该在回滚之前考虑一下为什么你的问题被编辑了。
  • 那么你的解决方案到底是什么?你是如何实施的?我尝试了“AcceptedAnswer”链接中的所有内容,但无法正常工作。谢谢。
  • 与 onTouchListener 配合得很好

标签: android scroll onclick gallery android-gallery


【解决方案1】:

这个answers your question。您必须让您的活动同时处理 onClick 和手势。

【讨论】:

  • 即使当我为画廊项目适配器中的视图设置 onclick 侦听器时它不起作用..
  • 您应该使用手势检测器中的 onSingleTap ......这将适用于您的情况!
  • onSingleTap?请多解释一下,因为我和 OP 有同样的问题,但我的 onClick 监听器在我的 baseAdapter 中
  • 我知道,如果有人来自 meta 并且仅通过向您显示指向 this question 的链接来否决这个好的答案,我完全反对它并发布此评论只是因为使用了您的答案,例如在那里我的回答,希望你不会介意或删除参考。
  • 是的,我记得讨论过这是我们的 Android 聊天室。我应该删除这个答案。我会保留一段时间并稍后扩展这个答案(我这几天有点忙),这个答案已经过时且粗鲁。
【解决方案2】:

在我的例子中,我只是使用了 Gallery.setOnItemClickListener 和 Listener 来处理对父 Activity 的回调。

当我在上面的解决方案中监听 Activity 时,点击并没有为我注册。

【讨论】:

  • 其他方法都不适合我,在找到这个答案后,我的画廊现在按预期工作。谢谢!!
【解决方案3】:

我也遇到过这个问题。经过2天的工作,我找到了一个完美的解决方案:

  1. 也为画廊设置onItemClickListener
  2. 在活动上,听画廊和活动的onTouchEvent,记下原始坐标

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        x = (int)event.getRawX();
        y = (int)event.getRawY();
        return false;
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        x = (int)event.getRawX();
        y = (int)event.getRawY();
        return super.onTouchEvent(event);
    }
    
  3. onItemClick 对于画廊,您可以在其中获取每个视图并检查点击坐标。

    Rect frame = new Rect();
    image[i].getGlobalVisibleRect(frame);
    if (frame.contains(x, y)) {//do whatever you want}
    

【讨论】:

  • 我在这里遇到问题,当我在画廊上设置 OnTouchListener 时,我的 OnItemClickListener 停止工作,即使我在 onTouch 上返回 false。有什么想法吗?
  • 你有没有尝试使用我的方法,我不需要将 OnTouchListener 设置为任何视图
【解决方案4】:

我遇到了同样的问题,但很容易解决。我所做的是将 setOnItemClickListener 添加到 GalleryView,然后获取我想要的视图,在我的例子中是 TextView。

 private boolean isVisble = true;
 gallery_images.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int arg2, long arg3) {
                    // TODO Auto-generated method stub
                    TextView image_text =  ((TextView)arg1.findViewById(R.id.image_text));
                    if(!isVisble){

                        isVisble = true;

                        image_text.setVisibility(TextView.VISIBLE);
                    }
                    else{
                        isVisble = false;
                        image_text.setVisibility(TextView.GONE);
                    }

                }
            });

在您的情况下,您可以首先检查显示了哪些图像,然后根据该信息来操作视图。希望这会有所帮助

【讨论】:

    【解决方案5】:

    我的活动中有多个画廊,我就是这样做的:

    实现OnItemClickListener:

    public class ImageBoardActivity extends Activity implements OnItemClickListener {
    

    覆盖onItemClick() 方法

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) {
        // do what you want here...
    }
    

    【讨论】:

    • 我希望画廊项目中的每个元素都可以点击,而不是整个画廊项目。我知道这种方式。请再次阅读这个问题,伙计..
    • 测试代码怎么样,dude(别再这么叫我了!)在我有多个画廊的简单案例中,view 参数是 ImageView(调试信息:android.widget.ImageView@483468d0) 在画廊内使用。所以,再次测试代码,dude
    • 如果图库包含RelativeLayout,您将如何处理。然后这个RelativeLayout 消耗了触摸.. 还不知道如何修复它。
    • 布局是否消耗触摸可自行更改。如果您设置了一个返回 true 的 OnTouchListener,则触摸被消耗。如果它总是返回 false,则触摸将委托给下一个孩子。
    【解决方案6】:

    我的解决方案:

    不要这样做!

    :=)) (花了 6 多个小时试图解决这个问题.. 对我没用...) 使用了另一种方法(不同的布局)

    【讨论】:

    • 有什么不同的布局?
    • 我想将 2 张图片放入画廊中,以预览包含双页的杂志。所以第 1 页、第 2-3 页、第 4-5 页 .. 等等,所以我使用了一个布局作为画廊项目的画廊,其中包含两个图像视图,并希望将 conclicklistener 放入每个图像视图。我尝试了一切(onTouchListener,onClickListener,使用密度像素的黑客攻击..)其中没有真正有效的解决方案(在另一个视图中检测一个视图,需要双击..)所以我最终将每个图像设置为画廊项目,(包含一个图像视图的布局) 并通过代码中的边距解决了安排... :=) 希望这会有所帮助,:)
    • 您能否发布示例布局以便其他人可以轻松理解.. :)
    • 它并不真正属于这篇文章,所以例如,如果我必须解决这个布局问题,我会使用 gridview 而不是画廊...您可以轻松选择每个布局:)
    • 但是如果我们需要水平滚动,那么我们可以用网格视图做什么......??有没有像水平滚动的gridview这样的东西? .. 客户端 UI 需求是这样的 .. 以不同的方式和简单的方式更改 UI .. 但是以我们的方式自定义视图是可能的 na?? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多