15

我目前正在尝试实现一个视频视图,它将在特定位置显示视频。我可以毫无问题地显示全屏视频。但是,每当我尝试在一个框架内显示该视频(例如一个小矩形)时,我只能在该视图中显示一部分视频。我无法将视频放入该视图中。

我已经在寻找很多关于在 android 中缩放视频的链接,但是我找不到任何方法来做到这一点。有关该问题的任何帮助都会有所帮助。

我正在使用的是我有 2 个不同的课程。其中一个是我的视频活动类,另一个是助手类:

public class VideoViewCustom extends VideoView {
    private int mForceHeight = 0;
    private int mForceWidth = 0;
    public VideoViewCustom(Context context) {
        super(context);
    }     
    public VideoViewCustom(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public VideoViewCustom(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public void setDimensions(int w, int h) {
        this.mForceHeight = h;
        this.mForceWidth = w;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
         setMeasuredDimension(mForceWidth, mForceHeight);
    }
}

该课程帮助我正确设置视频视图的尺寸,但是我无法使视频适合该区域。我的意思是我无法缩放视频以适应该区域。我不知道android是否自动缩放到给定的尺寸,但我做不到。

4

2 回答 2

2

愿这能帮助你...

public void onMeasure(int width, int height)
{
    getHolder().setFixedSize(width, height);
    forceLayout();
            setMeasuredDimension(width, height);
    invalidate();
}

...并尝试使用 RelativeLayout

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <VideoView 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentLeft="true"/>

</RelativeLayout>
于 2012-06-24T14:11:58.910 回答
1

我认为您必须创建一个 ViewGroup ,您可以在其中实现 onLayout() 方法。

在这里,您可以直接为每个视图调用 layout() 方法来设置视图的位置。

例子:

ViewGroup vg = new ViewGroup(this) {

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
            int x = getMeasuredWidth();
            int y = getMeasuredHeight();
            for (int i = 0; i < vg.getChildCount(); i++) {
                if(vg.getChildAt(i) instanceof TextView){
                    vg.getChildAt(i).layout(...);//and so on...

                }
            }
        }
};

希望有所帮助!!

于 2012-09-15T15:01:05.400 回答