开发 | Android开发 切换视频缩放比例:1:1, 满屏, 16:9, 4:3

基于VideoView开发切换视频缩放比例:1:1, 满屏, 16:9, 4:3等。


首先需要继承VideoView写一个新类,这里我们就把这个类叫做TestVideoView。

在TestVideoView这个类中重写onMeasure()这个方法,这个方法是处理view大小的关键。

代码如下(完整):

具体做法见代码注释

public class TestVideoView extends VideoView {

    //常量 在这里定义你需要的比例
    public static final String FULL_SCREEN = "full_screen";
    public static final String SIXTEEN_TO_NINE = "16:9";
    public static final String FOUR_TO_THREE = "4:3";
    public static final String ORIGIN_VIEW = "1:1";

    //变量 我这里写的默认比例1:1
    private String mRatio = ORIGIN_VIEW;

    //重写onMeasure方法
    //setMeasuredDimension(),切换view的大小
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        switch (mRatio){
        	//满屏 获取设备的宽高直接设置
            case FULL_SCREEN:
                int screenWidth = getScreenRatio()[0];
                int screenHigh = getScreenRatio()[1];
                setMeasuredDimension(screenWidth, screenHigh);
                break;

			//16:9
            case SIXTEEN_TO_NINE:
                Integer[] SixteenToNine = getVideoRatio(16, 9);
                setMeasuredDimension(SixteenToNine[0], SixteenToNine[1]);
                break;

			//4:3
            case FOUR_TO_THREE:
                Integer[] FourToThree = getVideoRatio(4, 3);
                setMeasuredDimension(FourToThree[0], FourToThree[1]);
                break;
                
            //..别的比例可以自定义
            
            //默认视频原大小
            default:
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
                break;
        }
    }

    //fragment传入当前选择的比例
    public void setScreenRatio(String ratio) {
        this.mRatio = ratio;
        requestLayout();
    }

    //根据传入比例换算view显示的大小 无论显示什么样的比例大小,视频的宽高有一边都需要贴边
    private Integer[] getVideoRatio(double width, double height) {
        int screenWidth = getScreenRatio()[0];
        int screenHigh = getScreenRatio()[1];

        // 计算要设置的视频宽度和高度
        int videoWidth = (int) (screenHigh * width / height);
        int videoHeight = screenHigh;

        // 如果视频宽度超过屏幕宽度,则调整
        if (videoWidth > screenWidth) {
            videoHeight = (int) (screenWidth * height / width);
            videoWidth = screenWidth;
        }

        return new Integer[] {videoWidth, videoHeight};
    }

    //获取当前设备屏幕宽高 返回的是数组
    private Integer[] getScreenRatio(){
        DisplayMetrics dm = getResources().getDisplayMetrics();
        int screenWidth = dm.widthPixels;
        int screenHigh = dm.heightPixels;
        return new Integer[] {screenWidth, screenHigh};
    }
}

总结

参考地址:Android获取屏幕分辨率的三种方法

以上就是如何使用重写onMeasure()来实现videoView显示范围的代码。

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值