android–VideoView不会缩放内容以匹配其父级

android–VideoView不会缩放内容以匹配其父级,第1张

概述我使用DraggablePanel库(https://github.com/pedrovgs/DraggablePanel)来促进类似YouTube的视频播放器.如果您不熟悉此功能,它基本上允许用户将当前正在播放的视频缩小为停靠在屏幕一角的小缩略图.不幸的是(我不太确定这是上述库的问题)我注意到如果我在VideoView的父视图上应用X和Y比例,VideoV

我使用DraggablePanel库(https://github.com/pedrovgs/DraggablePanel)来促进类似YouTube的视频播放器.如果您不熟悉此功能,它基本上允许用户将当前正在播放的视频缩小为停靠在屏幕一角的小缩略图.

不幸的是(我不太确定这是上述库的问题)我注意到如果我在VIDeoVIEw的父视图上应用X和Y比例,VIDeoVIEw本身将不会调整其内容的大小以匹配.

请参见下面的屏幕截图,其中VIDeoVIEw处于自然规模,然后将其父视图缩小到约0.6:0.6.您应该注意到,在缩放的屏幕截图中,VIDeoVIEw已裁剪其内容而不是调整大小以适应.

所以当我的父级比例发生变化时,我试图在VIDeoVIEw上强制宽度和高度.互联网上有一些关于覆盖VIDeoVIEw尺寸的例子 – 但这是我的简单版本:

public class scalableVIDeoVIEw extends VIDeoVIEw {    private int mVIDeoWIDth;    private int mVIDeoHeight;    public scalableVIDeoVIEw(Context context) {        super(context);    }    public scalableVIDeoVIEw(Context context,AttributeSet attrs) {        super(context,attrs);    }    public scalableVIDeoVIEw(Context context,AttributeSet attrs,int defStyle) {        super(context,attrs,defStyle);        mVIDeoWIDth = 0;        mVIDeoHeight = 0;    }    @OverrIDe    protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) {        if (mVIDeoWIDth > 0 && mVIDeoHeight > 0) {            // If a custom dimension is specifIEd,force it as the measured dimension            setMeasuredDimension(mVIDeoWIDth,mVIDeoHeight);        } else {            super.onMeasure(wIDthMeasureSpec,heightmeasureSpec);        }    }    public voID changeVIDeoSize(int wIDth,int height) {        mVIDeoWIDth = wIDth;        mVIDeoHeight = height;        getHolder().setFixedSize(wIDth,height);        requestLayout();        invalIDate();    }}

包含VIDeoVIEw的片段负责在从DraggablePanel库收到有关比例变化的通知时调用其上的changeVIDeoSize.此时,我根据提供的比例值计算一对新的宽度和高度. (比例从0f到1f)

public voID setVIDeoVIEwScale(float scaleX,float scaleY) {        if (mMaxVIDeoWIDth == 0) {            mMaxVIDeoWIDth = mVIDeoVIEw.getWIDth();        }        if (mMaxVIDeoHeight == 0) {            mMaxVIDeoHeight = mVIDeoVIEw.getHeight();        }        if (mMaxVIDeoWIDth > 0) {            mVIDeoVIEw.changeVIDeoSize((int) (scaleX * mMaxVIDeoWIDth),(int) (scaleY * mMaxVIDeoHeight));        }    }

不幸的是,这会产生一些非常有趣似乎VIDeoVIEw的视频部分正在适当缩放 – 但VIDeoVIEw的边界似乎缩放太快(导致视频缩小和裁剪).

为了进一步演示,这里有两个视频:

> https://github.com/npike/so_scalevideoview/blob/master/demo_videos/so_videoview_noscale.mp4
> https://github.com/npike/so_scalevideoview/blob/master/demo_videos/so_videoview_scale.mp4

我还将此示例项目上传到GitHub,以便您可以看到完整的代码:
https://github.com/npike/so_scalevideoview最佳答案我的应用程序遇到了同样的问题,所以我采用了更简单的示例,并尝试修复它.
这是修复问题的代码.将changeVIDeoSize(int wIDth,int height)方法编辑为:

public voID changeVIDeoSize(int wIDth,int height){    mVIDeoWIDth = wIDth;    mVIDeoHeight = height;    relativeLayout.LayoutParams lp = new relativeLayout.LayoutParams(wIDth,height);    lp.addRule(relativeLayout.CENTER_HORIZONTAL,relativeLayout.TRUE);    lp.addRule(relativeLayout.CENTER_VERTICAL,relativeLayout.TRUE);    setLayoutParams(lp);    requestLayout();    invalIDate();}

随着视图的失效,您强制VIDeoVIEw使用新的布局参数重绘整个视图. 总结

以上是内存溢出为你收集整理的android – VideoView不会缩放内容以匹配其父级全部内容,希望文章能够帮你解决android – VideoView不会缩放内容以匹配其父级所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1140482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存