基于父宽度的动态 VideoView 高度

Posted

技术标签:

【中文标题】基于父宽度的动态 VideoView 高度【英文标题】:Dynamic VideoView Height Based on Parent Width 【发布时间】:2013-02-14 03:21:54 【问题描述】:

我正在尝试将 VideoView 的大小调整为父容器的宽度,然后设置高度以保持 4:3 的纵横比。我看到了一些建议扩展 VideoView 类并覆盖 onMeasure 的答案,但我不明白我得到的参数或如何使用它们:

package com.example;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.VideoView;

public class MyVideoView extends VideoView 

    public MyVideoView(Context context) 
        super(context);
    

    public MyVideoView (Context context, AttributeSet attrs) 
        super(context, attrs);
    

    public MyVideoView (Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle);
    

    @Override
    protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) 
        Log.i("MyVideoView", "MyVideoView", "@@@", "image too tall, correcting");
            height = (width * mVideoHeight / mVideoWidth);
         else if (mVideoWidth * height < width * mVideoHeight) 
            // Log.i("@@@", "image too wide, correcting");
            width = (height * mVideoWidth / mVideoHeight);
         else 
            // Log.i("@@@", "aspect ratio is correct: " +
            // width+"/"+height+"="+
            // mVideoWidth+"/"+mVideoHeight);
        
    

    setMeasuredDimension(width, height);


其中 mVideoWidth 和 mVideoHeight 是视频的当前尺寸。 希望有帮助。 :)

【讨论】:

我真的没有视频的当前尺寸,因为播放器是在创建选项卡时创建的,然后用户单击列表项来播放视频。视频可以是 640x480 或 320x240。这似乎工作正常:int width = getDefaultSize(0, widthMeasureSpec); int height = getDefaultSize(0, heightMeasureSpec); setMeasuredDimension(width, width/4*3);

以上是关于基于父宽度的动态 VideoView 高度的主要内容,如果未能解决你的问题,请参考以下文章

VideoView 匹配父高度并保持纵横比

是否可以使用 sass 函数在媒体查询中从父宽度动态获取子高度? [复制]

获取 YouTube 视频尺寸(宽度/高度)

在CSS中如何让父元素的宽度等于其子元素的宽度之和?

UICollectionView 单元格在swift中使用约束固定宽度和动态高度

如何根据视频的高度和宽度设置屏幕方向