3

我想创建一个形状或按钮,但是当它被单击时,它会将事件发送到它后面的视图。我已经使用了 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;
  }

}

谢谢

4

4 回答 4

0

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

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

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

于 2012-12-11T13:39:14.947 回答
0

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

机器人:可点击=“假”

谢谢你的帮助

于 2012-12-11T14:28:41.947 回答
0
@Override 
    public boolean hasWindowFocus() {
            return isEnabled() && getVisibility() == VISIBLE ? true : false;
        }

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

于 2012-12-11T13:29:38.053 回答
0

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

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

如果您在更新按钮之前更新它,矩形将是您新的不可见按钮。

于 2012-12-11T15:34:47.963 回答