在TextureView上播放video
在Android的TextureView的文档说,你可以使用一个TextureView播放video:但我似乎无法find如何做到这一点的任何示例。 有人知道吗?
我需要使用textureView
因为我想animationvideo。 我想以.3gp / .mp4格式播放video,而不是来自相机的video:)
任何帮助,将不胜感激..
更新:
解决scheme发布为社区wiki答案
下面是你如何做到这一点:(由问题作者提供的解决scheme,他作为问题中的更新发布)
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 = (TextureView) findViewById(R.id.surface); mPreview.setSurfaceTextureListener(this); extras = getIntent().getExtras(); setContentView(mPreview); } 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(); } }
animation效果非常好。
我有同样的问题,并用TextureView
解决。 我发现setScaleX
和setScaleY
非常有用,如果这有助于任何人。 http://developer.android.com/reference/android/view/View.html#setScaleX%28float%29
但是,如果您只针对API 16+:
mediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
应该这样做:)
你的setContentView(mPreview);
需要被调用之前
mPreview = (TextureView) findViewById(R.id.surface); mPreview.setSurfaceTextureListener(this);