美文网首页
Android视频实现CenterCrop

Android视频实现CenterCrop

作者: zeyio | 来源:发表于2017-11-23 01:25 被阅读343次

    CenterCrop的核心是使用TextureView的setTransform方法来实现对视频区域的变换。

    思路来自于:github

    因为产品需求的原因,在展示视频的时候需要使用类似ImageView的CenterCrop属性。对指定区域进行填充,对视频等比放大。

    重写了TextureView,在其中使用MediaPlayer来播放视频。(上面库的ScalableVideoView 类里面)

    我的实现是在重写TextureView的View的onMeasure方法里面进行如下计算,来实现centerCrop:

    int viewWidth = getDefaultSize(mVideoWidth, widthMeasureSpec);
    int viewHeight = getDefaultSize(mVideoHeight, heightMeasureSpec);
    setMeasuredDimension(viewWidth, viewHeight);
    float scaleX = viewWidth * 1.0f / mVideoWidth;
    float scaleY = viewHeight * 1.0f / mVideoHeight;
    float maxScale = Math.max(scaleX, scaleY);
    //中心位置
    int pivotPointX = viewWidth / 2;
    int pivotPointY = viewHeight / 2;
    //初始效果是填满View,相当于fitXY. 这里从fitXY变成centerCrop..
    mMatrix.setScale(maxScale / scaleX , maxScale / scaleY, pivotPointX, pivotPointY);
    setTransform(mMatrix);
    

    相关文章

      网友评论

          本文标题:Android视频实现CenterCrop

          本文链接:https://www.haomeiwen.com/subject/gweavxtx.html