【问题标题】:How to click a view behind a button in Android?如何在Android中单击按钮后面的视图?
【发布时间】:2012-11-29 01:47:40
【问题描述】:

我想创建一个形状或按钮,但是当它被点击时,它会将事件发送到它后面的视图。 我已经使用了 onInterceptTouchEvent,但事件仍然是由按钮而不是视图来获取的。 这是我的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/RelativeLayout01" 
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:background="@drawable/background">

 <com.Example.MultitouchView
          android:id="@+id/touchView"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
          android:background="#FF0000" />

 <Button
    android:id="@+id/btnDo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg1"
    android:text="Test"
    android:textSize="20sp"
    android:textColor="#110342" >
</Button>

</RelativeLayout>

MultitouchView.class

public class MultitouchView extends View {

private boolean isMultiTouch = false;
private static final int        SWIPE_MIN_LENGHT        = 100;
private static final long       MULTITOUCH_DELAY        = 500;
private long    mTouchStart;

public MultitouchView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

public MultitouchView(Context context, AttributeSet attrs, int defStyle) {
          super(context, attrs, defStyle);

  }

  public MultitouchView(Context context, AttributeSet attrs) {
          super(context, attrs);

  }

  public boolean onInterceptTouchEvent(MotionEvent event){
    Toast toast = Toast.makeText(getContext(), "TEST", 1000);
    toast.show();

    return false;

  }

  @Override
  public boolean onTouchEvent(MotionEvent event) {
        super.onTouchEvent(event);
        int action = event.getAction() & MotionEvent.ACTION_MASK;
        switch (action) {
            case MotionEvent.ACTION_DOWN: {
                Log.d("MultitouchExample","Action Down");
                mTouchStart = System.currentTimeMillis();
                SoundManager.playSound(1,1);
                break;
            }
        }
        return true;
  }

}

谢谢

【问题讨论】:

  • 您是否尝试在 Button 组件上以编程方式设置 OnclickListener(),然后在 onClick 方法上返回 false。这使得onClick事件通过并继续到后面的其他组件?

标签: android events touch


【解决方案1】:

您可以在按钮的大小和位置上创建一个 Rectangle 变量,然后像这样使用它;

If(touch != null && rectangle.contains(touchPoint))
{
    // do action      
}  

如果您在更新按钮之前更新此按钮,则矩形将成为您新的不可见按钮。

【讨论】:

    【解决方案2】:

    我已经解决了这个问题,在按钮中添加了这个:

    android:clickable="false"

    感谢您的帮助

    【讨论】:

      【解决方案3】:

      您应该在 Button.onTouchEvent() 中扩展 Button 并返回 false

      new Button(dozActivity) {
      @Override
      public boolean onTouchEvent(MotionEvent event)
      {
          return false;
      }
      };
      

      或者通知按钮后面的View的OnTouchListener:

      【讨论】:

      • 按钮不起作用,我创建了 ButtonDummy,onTouchEvent 返回 false,但我仍然遇到同样的问题。
      【解决方案4】:
      @Override 
          public boolean hasWindowFocus() {
                  return isEnabled() && getVisibility() == VISIBLE ? true : false;
              }
      

      在您的 MultiTouchView 类中。 我希望这有效

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多