Android 在媒体播放器内更改视频时出现故障
我的要求是改变与动画视频播放器内的视频。当一个人点击“更改”按钮时,媒体播放器中的视频将被一个新的更改,旧的将以放大动画结束。我能够借助纹理视图实现此功能,但我遇到一个问题,即更改视频时出现了小故障。有什么办法可以让它更平滑吗 这是我的代码:Android 在媒体播放器内更改视频时出现故障,android,android-mediaplayer,android-textureview,Android,Android Mediaplayer,Android Textureview,我的要求是改变与动画视频播放器内的视频。当一个人点击“更改”按钮时,媒体播放器中的视频将被一个新的更改,旧的将以放大动画结束。我能够借助纹理视图实现此功能,但我遇到一个问题,即更改视频时出现了小故障。有什么办法可以让它更平滑吗 这是我的代码: public class VideoVieww extends Activity implements TextureView.SurfaceTextureListener { private TextureView textureVi
public class VideoVieww extends Activity implements TextureView.SurfaceTextureListener {
private TextureView textureView;
private MediaPlayer mMediaPlayer;
private Button mButton;
private Animation zoomAnimation;
private SurfaceTexture mSurfaceTexture;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.texture_layout);
textureView = findViewById(R.id.textureView);
textureView.setSurfaceTextureListener(this);
zoomAnimation = AnimationUtils.loadAnimation(VideoVieww.this, R.anim.zomm_out);
mButton = findViewById(R.id.change);
mButton.setOnClickListener(view -> {
if (mMediaPlayer.isPlaying()) {
mMediaPlayer.stop();
mMediaPlayer.release();
mMediaPlayer = null;
}
textureView.startAnimation(zoomAnimation);
try {
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(VideoVieww.this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.broadchurch));
} catch (IOException e) {
e.printStackTrace();
}
try {
Surface surface = new Surface(mSurfaceTexture);
mMediaPlayer.setSurface(surface);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
});
zoomAnimation.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
mMediaPlayer.start();
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
mMediaPlayer.release();
mMediaPlayer=null;
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
mSurfaceTexture=surfaceTexture;
Surface surface = new Surface(surfaceTexture);
try {
mMediaPlayer= new MediaPlayer();
mMediaPlayer.setDataSource(VideoVieww.this, Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.sid));
mMediaPlayer.setSurface(surface);
mMediaPlayer.prepare();
mMediaPlayer.start();
// mMediaPlayer.setLooping(true);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
return false;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
}
任何帮助都将不胜感激 你什么时候看到故障?开始动画之前或开始下一个视频之前?在开始下一个视频之前,请尝试在动画开始和结束时设置MediaPlayer,只需调用mMediaPlayer.start()。以确保您理解我的意思。提前做好你能做的所有工作。因此,由于您有两个视频,一个是结束的,另一个是开始的,所以请使用两个MediaPlayer。尽可能快地准备下一个,以避免任何可能的延迟。我尝试了两个媒体播放器,但仍然不顺利。什么时候会出现故障?开始动画之前或开始下一个视频之前?在开始下一个视频之前,请尝试在动画开始和结束时设置MediaPlayer,只需调用mMediaPlayer.start()。以确保您理解我的意思。提前做好你能做的所有工作。因此,由于您有两个视频,一个是结束的,另一个是开始的,所以请使用两个MediaPlayer。尽可能快地准备下一个,以避免任何可能的延迟。我尝试了两个媒体播放器,但仍然不顺利。