//设置避免视频播放时拉伸,复制可直接使用
private void stretching(float mtextureViewWidth,float mtextureViewHeight){
//mtextureViewWidth为textureView宽,mtextureViewHeight为textureView高
//mtextureViewWidth宽高,为什么需要用传入的,因为全屏显示时宽高不会及时更新
Matrix matrix = new Matrix();
//videoView为new MediaPlayer()
mVideoWidth=videoView.getVideoWidth();
mVideoHeight=videoView.getVideoHeight();
// mtextureViewWidth=textureView.getWidth();
// mtextureViewHeight=textureView.getHeight();
//得到缩放比,从而获得最佳缩放比
float sx = mtextureViewWidth / mVideoWidth;
float sy = mtextureViewHeight / mVideoHeight;
//先将视频变回原来的大小
float sx1 = mVideoWidth / mtextureViewWidth;
float sy1 = mVideoHeight/mtextureViewHeight;
matrix.preScale(sx1,sy1);
Log.d("mat",matrix.toString());
//然后判断最佳比例,满足一边能够填满
if(sx>=sy){
matrix.preScale(sy,sy);
//然后判断出左右偏移,实现居中,进入到这个判断,证明y轴是填满了的
float leftX=(mtextureViewWidth - mVideoWidth * sy) / 2;
matrix.postTranslate(leftX, 0);
}else{
matrix.preScale(sx,sx);
float leftY=(mtextureViewHeight - mVideoHeight*sx) / 2;
matrix.postTranslate(0, leftY);
}
textureView.setTransform(matrix);//将矩阵添加到textureView
textureView.postInvalidate();//重绘视图
}
第二种方法,来自官方文档,api版本需要大于16,setVideoScalingMode
videoView.setVideoScalingMode(videoView.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
public void setVideoScalingMode (int mode)
设置视频缩放模式。为了使目标视频缩放模式在播放期间有效,必须在设置数据源之后调用此方法。如果未调用,则默认视频缩放模式为VIDEO_SCALING_MODE_SCALE_TO_FIT。
支持的视频缩放模式为:
VIDEO_SCALING_MODE_SCALE_TO_FIT (默认铺满)
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING (保持比例,多余会被裁剪)
Android安卓解决textureView播放视频,图片拉伸问题
最新推荐文章于 2022-07-03 08:37:55 发布