【问题标题】:TextView Within Gallery图库内的TextView
【发布时间】:2011-10-05 01:48:43
【问题描述】:

我有可滚动的 TextViewGallery 当我为TextView 启用onTouchEvent() 时,我无法浏览Gallery 如果我禁用onTouchEvent(),我可以左右滚动Gallery 但无法向上滚动到TextView

我尝试了一些技巧,比如将相同的 MotionEvent() 发送给 GalleryTextView .. 任何想法如何解决它?

【问题讨论】:

  • @Nathan Fig,我会试着做一个样本。

标签: android scroll textview gallery


【解决方案1】:

您是否尝试过在画廊中使用 ScrollView?这是一些工作示例:ScrollView inside Gallery, both scrolling independently

【讨论】:

    【解决方案2】:

    嘿,您必须尝试此代码,它将帮助您解决问题

    float oldx;
    float oldy;
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        boolean result = false;
        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            result = super.onTouchEvent(event);
        } else if (event.getAction() == MotionEvent.ACTION_UP) {   
            result = super.onTouchEvent(event);
        } else  if (event.getAction() == MotionEvent.ACTION_MOVE) {
            /**
             * Condition :: Math.abs(oldx - event.getX()) > 10 will check weather user had drag horizontal or vertical. 
             * You can change value 10 according to your requirement 
             */
            if(Math.abs(oldx - event.getX()) > 10) {
                result = super.onTouchEvent(event);
            } else {
                result =  true;
            }
        }   
        oldx = event.getX();
        oldy = event.getY();
        return result;
    }
    

    【讨论】:

      【解决方案3】:

      我的回答:

      public class CustomGallery extends Gallery {
      
          public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
              super(context, attrs, defStyle);
          }
      
          public CustomGallery(Context context, AttributeSet attrs) {
              super(context, attrs);
          }
      
          public CustomGallery(Context context) {
              super(context);
          }
      
          @Override
          public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
              float r = (velocityX > 0 ? Math.min(800f, velocityX) : Math.max(-800f, velocityX));
              return super.onFling(e1, e2, r, velocityY);
          }
      
          float oldX, oldY;
          boolean isDown = false;
      
          @Override
          public boolean onInterceptTouchEvent(MotionEvent ev) {
              int action = ev.getAction();
              switch (action) {
                  case MotionEvent.ACTION_DOWN:
                      oldX = ev.getX();
                      oldY = ev.getY();
                      isDown = true;
                      return super.onInterceptTouchEvent(ev);
      
                  case MotionEvent.ACTION_MOVE:
                      if (isDown) {
                          float diffX = Math.abs(ev.getX() - oldX);
                          float diffY = Math.abs(ev.getY() - oldY) + 20f;
                          if (diffY > diffX) {
                              return false;// handled by TextView
                          }
                      }
                      return true;// handled by Gallery
      
                  case MotionEvent.ACTION_UP:
                      isDown = false;
                      return super.onInterceptTouchEvent(ev);
      
                  default:
                      return super.onInterceptTouchEvent(ev);
              }
          }
      
      }
      

      感谢@teepee 为解决方案提供了巨大的提示:D

      【讨论】:

        【解决方案4】:

        设置了onTouch事件,为什么不在画廊onMotionEvent中为textview使用onclick事件

        【讨论】:

        • 我没有处理Click事件,我正在处理Touch事件!!
        【解决方案5】:

        尝试在 onTouch 事件中设置return false

        【讨论】:

          【解决方案6】:

          TextView 和/或Gallery 可能会将焦点从ListView 上移开,如果您正在使用其中之一或滚动功能使其无法上下滚动,请尝试移除可聚焦的TextView 和 Gallery 看看是否有帮助。然后你应该仍然可以使用你的 touchEvents ......只是一个想法,但不确定它是否真的能解决问题。希望我能提供更多帮助。

          【讨论】:

            【解决方案7】:

            创建一个扩展容器布局并包含可滚动 TextView 的自定义视图。将其用作您的画廊项目。

            【讨论】:

              猜你喜欢
              • 2014-05-09
              • 1970-01-01
              • 2014-12-04
              • 1970-01-01
              • 1970-01-01
              • 2013-07-07
              • 1970-01-01
              • 1970-01-01
              • 2012-12-25
              相关资源
              最近更新 更多