15

現在、特定の位置にビデオを表示するビデオビューを実装しようとしています。フルスクリーンのビデオを問題なく表示できます。ただし、そのビデオをフレーム (たとえば小さな長方形) 内に表示しようとすると、そのビューにビデオの一部しか表示できません。ビデオをそのビューに収めることができませんでした。

Androidでビデオをスケーリングすることに関する多くのリンクをすでに探していますが、これを行う方法が見つかりませんでした. その問題に関するヘルプは役に立ちます。

私が使用しているのは、2つの異なるクラスがあることです。1 つはビデオ アクティビティ クラスで、もう 1 つはヘルパー クラスです。

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

onLayout() メソッドを実装できる ViewGroup を作成する必要があると思います。

ここで、ビューごとに直接 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 に答える