gpt4 book ai didi

android - onInterceptTouchEvent 的 ViewGroup 子类

转载 作者:行者123 更新时间:2023-11-29 20:56:51 25 4
gpt4 key购买 nike

我的布局看起来像这样:

enter image description here

我使用了一个包含 llMainscrollRelativeLayout。在 llMain 中,我有另外两个 LinearLayouts:ll1ll2。每个 LinearLayouts 都包含两个 Buttons

我希望能够在 llMain 上的任意位置滑动来调用某个函数。但我也希望能够单击也在 llmain 中的 Buttons

所以我尝试实现 onInterceptTouchEvent。如果我在 Button 上滑动,我希望 onInterceptTouchEvent 拦截对 Button 的 onTouchEvent 的调用并执行滑动操作.如果我只是点击一个 Button,我不想调用 onInterceptTouchEvent。相反,我希望调用 Button onTouchEvent 并执行 Button 单击

我为 llmain 创建了一个 Subclass ViewGroup,但我无法正确实现它。它不识别滑动 Action ,只识别点击。有人可以看看并提供帮助吗:

public class Game extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.relativeLayout);

swipeLinearLayout = new Container(this); //this is supposed to connect to llmain

}

private class Container extends LinearLayout {

public Container(Context context) {
super(context);
}
private float mLastX=0;
private float mLastY=0;

@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
swipeLayout() //if event recognized as swipe, then swipe
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX();
float y = event.getY();
float xDelta = Math.abs(x - mLastX);
float yDelta = Math.abs(y - mLastY);

if (yDelta > xDelta) {
return true;
}
break;
}

return false;
}

@Override
public boolean onTouchEvent(MotionEvent event) {
ButtonClick(); //if event is click, then perform button click
return true;
}
}
}

我的 swipeLinearLayout 没有正确连接到我的 llmain。因此它不会执行滑动或单击操作。我该如何解决这个问题?

最佳答案

使用这个 GestureDetector:

GestureDetector.OnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.d(TAG, "onFling " );
return true;
}
};
GestureDetector gestureDetector = new GestureDetector(this, listener);

并在您的自定义 ViewGroup(容器类)中这样调用它:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return gestureDetector.onTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
gestureDetector.onTouchEvent(ev);
return true;
}

关于android - onInterceptTouchEvent 的 ViewGroup 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27407932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com