Java 使用手势控制时Exoplayer应用程序崩溃
我使用exoplayer来流式播放视频文件,但当我尝试实现手势控制(如向上滑动、向下滑动、双击)时,应用程序崩溃。简单地说,当我向上或向下滑动时,应用程序崩溃,双击根本不起作用。 我的外星玩家活动Java 使用手势控制时Exoplayer应用程序崩溃,java,android,gesture,exoplayer2.x,Java,Android,Gesture,Exoplayer2.x,我使用exoplayer来流式播放视频文件,但当我尝试实现手势控制(如向上滑动、向下滑动、双击)时,应用程序崩溃。简单地说,当我向上或向下滑动时,应用程序崩溃,双击根本不起作用。 我的外星玩家活动 GESTURECONTROLLER gcont = new GESTURECONTROLLER(); gcont.setActivity(this); gestureDetectorCompat = new GestureDetectorCompat(t
GESTURECONTROLLER gcont = new GESTURECONTROLLER();
gcont.setActivity(this);
gestureDetectorCompat = new GestureDetectorCompat(this, gcont);
LoadControl loadControl = new DefaultLoadControl();
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelector trackSelector = new DefaultTrackSelector(new AdaptiveTrackSelection.Factory(bandwidthMeter));
simpleExoPlayer = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
playerView.setPlayer(simpleExoPlayer);
DefaultDataSourceFactory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "demo"));
MediaSource contentMediaSource = buildMediaSource(streamLink);
MediaSource[] mediaSources = new MediaSource[1];
mediaSources[0] = contentMediaSource;
MediaSource mediaSource = new MergingMediaSource(mediaSources);
simpleExoPlayer.prepare(mediaSource);
simpleExoPlayer.setPlayWhenReady(true);
playerView.setKeepScreenOn(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
gestureDetectorCompat.onTouchEvent(event);
return true;
}
public void ifDoubleTap() {
Toast.makeText(this, "I double tap", Toast.LENGTH_SHORT).show();
}
public void ifSwipeLeft() {
Toast.makeText(this, "I swipe Left", Toast.LENGTH_SHORT).show();
}
public void ifSwipeRight() {
Toast.makeText(this, "I swipe Right", Toast.LENGTH_SHORT).show();
}
public void ifSwipeUp() {
Toast.makeText(this, "I swipe Up", Toast.LENGTH_SHORT).show();
}
public void ifSwipeDown() {
Toast.makeText(this, "I swipe Down", Toast.LENGTH_SHORT).show();
}
我的手势控制器类
public class GESTURECONTROLLER extends GestureDetector.SimpleOnGestureListener {
private static int MIN_SWIPE_DISTANCE_X = 100;
private static int MIN_SWIPE_DISTANCE_Y = 100;
private static int MAX_SWIPE_DISTANCE_X = 1000;
private static int MAX_SWIPE_DISTANCE_Y = 1000;
private MainActivity activity = null;
public MainActivity getActivity(){
return activity;
}
public void setActivity(MainActivity activity){
this.activity = activity;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
float deltaX = e1.getX() - e2.getX();
float deltaY = e1.getY() - e2.getY();
float deltaXabs = Math.abs(deltaX);
float deltaYabs = Math.abs(deltaY);
if (deltaXabs >= MIN_SWIPE_DISTANCE_X && deltaXabs <= MAX_SWIPE_DISTANCE_X){
if(deltaX > 0 ) {
//Swipe Left
this.activity.ifSwipeLeft();
} else {
//Swipe Right
this.activity.ifSwipeRight();
}
}
if (deltaYabs >= MIN_SWIPE_DISTANCE_Y && deltaYabs <= MAX_SWIPE_DISTANCE_Y){
if(deltaY > 0 ) {
//Swipe Up
this.activity.ifSwipeUp();
} else {
//Swipe Down
this.activity.ifSwipeDown();
}
}
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
this.activity.IfSingletap();
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
this.activity.ifDoubleTap();
return true;
}
公共类GESTURECONTROLLER扩展GestureDetector.SimpleOnGestureListener{
专用静态整数最小滑动距离X=100;
专用静态最小滑动距离=100;
专用静态int最大滑动距离=1000;
专用静态int最大滑动距离=1000;
private MainActivity活动=null;
公共main活动getActivity(){
返回活动;
}
公共无效设置活动(主活动){
这个。活动=活动;
}
@凌驾
公共布尔onFling(MotionEvent e1、MotionEvent e2、float-velocityX、float-velocityY){
float deltaX=e1.getX()-e2.getX();
float deltaY=e1.getY()-e2.getY();
浮动deltaXabs=Math.abs(deltaX);
float deltaYabs=Math.abs(deltaY);
如果(deltaXabs>=最小滑动距离&&deltaXabs 0){
//左击
this.activity.ifswipleft();
}否则{
//向右滑动
this.activity.ifSwipeRight();
}
}
如果(deltaYabs>=最小滑动距离&&deltaYabs 0){
//刷卡
this.activity.ifSwipeUp();
}否则{
//向下滑动
this.activity.ifSwipeDown();
}
}
返回true;
}
@凌驾
公共布尔值OnSingleTapConfiged(运动事件e){
this.activity.IfSingletap();
返回true;
}
@凌驾
公共布尔onDoubleTap(运动事件e){
this.activity.ifDoubleTap();
返回true;
}
我知道exoplayer库中硬编码的默认触摸控件,但我可以禁用它并改用此控件吗你能发布日志吗?@Louis Nguyen我不能使用物理设备你能在GESTURECONTROLLER中检查空活动吗?@LouisNguyen我该如何尝试在像这样使用它之前检查空活动下面:if(this.activity!=null){this.activity.ifswipleft();}