EXOPlayer居中播放,类似ImageView的CENTER_CROP
16lz
2021-01-23
1、自定义TextureView
import android.content.Context;import android.graphics.Matrix;import android.util.AttributeSet;import android.view.TextureView;/** * 视频自动居中裁剪自定义TextureView */public class TextureVideoView extends TextureView{ private float mVideoHeight; private float mVideoWidth; private ScaleType mScaleType; public enum ScaleType { CENTER_CROP, TOP, BOTTOM } public void setWH(float mVideoWidth,float mVideoHeight){ this.mVideoWidth=mVideoWidth; this.mVideoHeight=mVideoHeight; updateTextureViewSize(); } public TextureVideoView(Context context) { super(context); initView(); } public TextureVideoView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public TextureVideoView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } private void initView() { setScaleType(ScaleType.CENTER_CROP); } public void setScaleType(ScaleType scaleType) { mScaleType = scaleType; } private void updateTextureViewSize() { float sx = (float) getWidth() / mVideoWidth; float sy = (float) getHeight() / mVideoHeight; Matrix matrix = new Matrix(); float maxScale = Math.max(sx, sy); //第1步:把视频区移动到View区,使两者中心点重合. matrix.preTranslate((getWidth() - mVideoWidth) / 2, (getHeight() - mVideoHeight) / 2); //第2步:因为默认视频是fitXY的形式显示的,所以首先要缩放还原回来. matrix.preScale(mVideoWidth / (float) getWidth(), mVideoHeight / (float) getHeight()); //第3步,等比例放大或缩小,直到视频区的一边超过View一边, 另一边与View的另一边相等. 因为超过的部分超出了View的范围,所以是不会显示的,相当于裁剪了. matrix.postScale(maxScale, maxScale, getWidth() / 2, getHeight() / 2);//后两个参数坐标是以整个View的坐标系以参考的 setTransform(matrix); }}
二、设置mTextureVideoView.setScaleType(TextureVideoView.ScaleType.CENTER_CROP);属性
三、当获取到视频的宽高时mTextureVideoView.setWH()
注:Exo获取视频宽高方法:
player.setVideoListener(new SimpleExoPlayer.VideoListener() { public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) { //视频宽和高 } @Override public void onRenderedFirstFrame() { } }); }
更多相关文章
- Android SurfaceView 实现实时显示摄像头视频
- Android 使用MediaPlayer播放视频切换后台暂停再恢复互前台继续
- Android 音视频开发总结
- android 播放视频 Android 播放音频
- 推荐一款视频转换软件免费无插件ipad/iphone/Android/YouTube适
- android 基于ffmpeg将视频采集的nv21转h264格式数据
- Android的raw下视频文件的读写-日记
- Android三种播放视频的方式
- Android 实时视频采集/编码/传输/解码/播放—方案调研