Android安卓解决textureView播放视频,图片拉伸问题

    //设置避免视频播放时拉伸,复制可直接使用
    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 (保持比例,多余会被裁剪)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值