gpt4 book ai didi

android - 检测 fragment 中的滑动手势

转载 作者:IT老高 更新时间:2023-10-28 23:21:32 25 4
gpt4 key购买 nike

您好,我已经实现了一个 Fragment,我想检测我的 Fragment 上的触摸事件。

但我无法检测到该事件,事实上,根本没有检测到任何事件。它在 Activity 中运行良好,但它不适用于 fragment 。

以下是我的代码:

  public class Swipe_Fragment extends Fragment implements
GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener {

private SimpleGestureFilter detector;
private LinearLayout swipLinear;
private static int DEFAULT = 50;
private int brightness;
private GestureDetectorCompat mDetector;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.swipe_screen, container,
false);
swipLinear = (LinearLayout) rootView.findViewById(R.id.swipLinear);

brightness = DEFAULT;
mDetector = new GestureDetectorCompat(getActivity(), this);
// Set the gesture detector as the double tap
// listener.
mDetector.setOnDoubleTapListener(this);
// Detect touched area
// detector = new SimpleGestureFilter(getActivity(), this);
return rootView;
}


@Override
public boolean onDoubleTap(MotionEvent arg0) {
Toast.makeText(getActivity(), "onDoubleTap", Toast.LENGTH_LONG).show();
return false;
}

@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Toast.makeText(getActivity(), "onDoubleTapEvent", Toast.LENGTH_LONG).show();
return false;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Toast.makeText(getActivity(), "onSingleTapConfirmed", Toast.LENGTH_LONG).show();
return false;
}

@Override
public boolean onDown(MotionEvent e) {
Toast.makeText(getActivity(), "onDown", Toast.LENGTH_LONG).show();
return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Toast.makeText(getActivity(), "onFling", Toast.LENGTH_LONG).show();
return false;
}

@Override
public void onLongPress(MotionEvent e) {
Toast.makeText(getActivity(), "onLongPress", Toast.LENGTH_LONG).show();

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
Toast.makeText(getActivity(), "onScroll", Toast.LENGTH_LONG).show();
return false;
}

@Override
public void onShowPress(MotionEvent e) {
Toast.makeText(getActivity(), "onShowPress", Toast.LENGTH_LONG).show();

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
Toast.makeText(getActivity(), "onSingleTapUp", Toast.LENGTH_LONG).show();
return false;
}

}

最佳答案

最后我从下面的代码中得到了一个解决方案,它来自 Android Fragment onCreateView with Gestures .

  final GestureDetector gesture = new GestureDetector(getActivity(),
new GestureDetector.SimpleOnGestureListener() {

@Override
public boolean onDown(MotionEvent e) {
return true;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.i(Constants.APP_TAG, "onFling has been called!");
final int SWIPE_MIN_DISTANCE = 120;
final int SWIPE_MAX_OFF_PATH = 250;
final int SWIPE_THRESHOLD_VELOCITY = 200;
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i(Constants.APP_TAG, "Right to Left");
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Log.i(Constants.APP_TAG, "Left to Right");
}
} catch (Exception e) {
// nothing
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});

v.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return gesture.onTouchEvent(event);
}
});

这在 fragment 的 onCreateView() 方法中。

关于android - 检测 fragment 中的滑动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981337/

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