Android 检测片段中的滑动手势
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22981337/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Detect swipe gesture in fragment
提问by Siddhpura Amit
Hi I have implemented a Fragment
, and I want to detect touch event on my fragment.
嗨,我已经实现了一个Fragment
,我想检测我的片段上的触摸事件。
But I am unable to detect that event, as a matter of fact, no event is beign detected at all. It works well in Activity
, but it's not working on fragments.
但是我无法检测到该事件,事实上,根本没有检测到任何事件。它在 中运行良好Activity
,但不适用于片段。
Following is my code:
以下是我的代码:
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;
}
}
回答by Siddhpura Amit
Finally I got a solution from the code below, which is from Android Fragment onCreateView with Gestures.
最后我从下面的代码中得到了一个解决方案,它来自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);
}
});
This goes in the onCreateView()
method of the fragment.
这在onCreateView()
片段的方法中。