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() {            }        });    }



更多相关文章

  1. Android(安卓)SearchView结合Filter实现列表检索功能使用总结
  2. android如何获取SD卡上的多媒体文件
  3. android image cache 图片缓存 异步 下载
  4. android获取设备屏幕大小的方法
  5. Android(安卓)获取屏幕尺寸实例代码
  6. Android(安卓)获取手机的IMEI等设备信息
  7. android 获取进程名字
  8. android获取屏幕相关信息
  9. android 学习视频汇总

随机推荐

  1. Android:创建可穿戴应用 - 安装和依赖管理
  2. Gravity and layout gravity
  3. Android打造属于自己的时间钟表
  4. 让人郁闷的腾讯Android(安卓)QQ
  5. Android(安卓)组件化最佳实践 ARetrofit
  6. Android主题theme和风格style总结
  7. Android(安卓)Handler 的基本用法
  8. 【Android每日一讲】2012.11.28 快速地搜
  9. 从零开始--系统深入学习android(实践-让我
  10. 个人使用的Android(安卓)Studio快捷键(MAC