我有一个videoView中的片段,我需要检测它的手势。我尝试用下面的代码没有成功。我如何正确实现这一点?需要帮助。提前致谢。videoView内的Android手势检测器片段
CustomVideoView.java
public class CustomVideoView extends VideoView {
private GestureDetector gestureDetector;
public CustomVideoView(Context context) {
super(context);
}
public CustomVideoView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomVideoView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return gestureDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
}
public void setGestureDetector(GestureDetector gestureDetector) {
this.gestureDetector = gestureDetector;
}
}
MyFragment.java
public class MyFragment extends Fragment{
private Context context;
private CustomVideoView videoView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = getActivity();
View tmp_view = inflater.inflate(R.layout.my_fragment, container, false);
assert tmp_view != null;
videoView = (CustomVideoView) tmp_view.findViewById(R.id.videoView);
MediaController mc = new MediaController(context);
mc.setAnchorView(videoView);
mc.setMediaPlayer(videoView);
Uri video = Uri.parse("myUrl");
videoView.setMediaController(mc);
videoView.setVideoURI(video);
videoView.requestFocus();
videoView.start();
videoView.setGestureDetector(new GestureDetector(new CustomeGestureDetector()));
return tmp_view;
}
private class CustomeGestureDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
//NEVER CALLED
if(e1 == null || e2 == null) return false;
if(e1.getPointerCount() > 1 || e2.getPointerCount() > 1) return false;
else {
try { // right to left swipe .. go to next page
if(e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 800) {
//do your stuff
Log.i("MyApp", "right to left");
return true;
} //left to right swipe .. go to prev page
else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 800) {
//do your stuff
Log.i("MyApp", "left to right");
return true;
} //bottom to top, go to next document
else if(e1.getY() - e2.getY() > 100 && Math.abs(velocityY) > 800
&& videoView.getScrollY() >= videoView.getHeight()) {
//do your stuff
return true;
} //top to bottom, go to prev document
else if (e2.getY() - e1.getY() > 100 && Math.abs(velocityY) > 800) {
//do your stuff
return true;
}
} catch (Exception e) { // nothing
}
return false;
}
}
@Override
public boolean onDown(MotionEvent event) {
Log.i("MyApp", "onDown");
//THIS IS CALLED WHEN TOUCH
return super.onDown(event);
}
}
当我触摸我的VideView只响应它的控制(播放,暂停......),但姿态探测器从未打过电话也许这些控件扰乱我的手势检测器?
触摸时会调用onDown事件,但永远不会触发onFling。是否有可能通过onDown事件实现onFling函数?
我刚刚用onFling方法创建了一个监听器类。我的问题是,从来没有被称为。当我触摸videoview时,只响应其控件(播放,停止...),但手势检测器从未呼叫过。 – user3065901 2014-10-22 10:35:06
我正在尝试调试您的代码。只要我找到一些东西,会立即回复给你。我认为'GestureDetector'没有获得'videoView'的上下文。 – Siddharth2092 2014-10-22 10:47:20
我不明白你使用'gestureDetector.onTouchEvent(ev)||的逻辑。 super.onTouchEvent(ev)'。你为什么这样做? – Siddharth2092 2014-10-22 10:58:22