在纹理视图上播放视频
2022-08-31 17:02:13
在Android TextureView的文档中,它说您可以使用TextureView播放视频:但我似乎找不到任何如何做到这一点的示例。有人知道吗?
我需要使用 a,因为我想对视频进行动画处理。我想播放.3gp/.mp4格式的视频,而不是来自“相机”:)textureView
任何帮助将不胜感激。
更新:
解决方案作为社区 wiki 答案发布
在Android TextureView的文档中,它说您可以使用TextureView播放视频:但我似乎找不到任何如何做到这一点的示例。有人知道吗?
我需要使用 a,因为我想对视频进行动画处理。我想播放.3gp/.mp4格式的视频,而不是来自“相机”:)textureView
任何帮助将不胜感激。
更新:
解决方案作为社区 wiki 答案发布
以下是您如何做到这一点:(问题作者的解决方案,他在问题中作为更新发布)
Public class MediaPlayerDemo_Video extends Activity implements TextureView.SurfaceTextureListener {
private MediaPlayer mMediaPlayer;
private TextureView mPreview;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
mPreview = new TextureView(this);
mPreview.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
mPreview.setSurfaceTextureListener(this);
extras = getIntent().getExtras();
setContentView(mPreview);
}
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
Surface s = new Surface(surface);
try {
mMediaPlayer= new MediaPlayer();
mMediaPlayer.setDataSource("http://daily3gp.com/vids/747.3gp");
mMediaPlayer.setSurface(s);
mMediaPlayer.prepare();
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
动画制作效果非常好。
我有同样的问题,并用.我发现并且非常有用,如果这对任何人有所帮助。http://developer.android.com/reference/android/view/View.html#setScaleX%28float%29TextureView
setScaleX
setScaleY
但是,如果您仅面向 API 16+:
mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
应该这样做:)