Android 如何使视频视图中的视频旋转90度并全屏显示

Android 如何使视频视图中的视频旋转90度并全屏显示,android,video,android-videoview,Android,Video,Android Videoview,我正试图得到一个视频作为背景播放。但我只能让它占据半个屏幕。因此,我需要将视频拉伸到16:9,并将其旋转90度,使其全屏显示 我现在正在一个测试项目中工作 主要活动 public class MainActivity extends AppCompatActivity implements GestureOverlayView.OnGesturePerformedListener{ GestureLibrary gestureLib; VideoView vvRick; private But

我正试图得到一个视频作为背景播放。但我只能让它占据半个屏幕。因此,我需要将视频拉伸到16:9,并将其旋转90度,使其全屏显示

我现在正在一个测试项目中工作

主要活动

public class MainActivity extends AppCompatActivity implements GestureOverlayView.OnGesturePerformedListener{

GestureLibrary gestureLib;
VideoView vvRick;
private Button btnTest;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        gestureLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
        if (!gestureLib.load()) {
            finish();
        }
        GestureOverlayView gOverlay =
                (GestureOverlayView) findViewById(R.id.gOverlay);
        gOverlay.addOnGesturePerformedListener(this);

        vvRick = (VideoView)findViewById(R.id.vvRick);
        btnTest = (Button)findViewById(R.id.btnTest);

        btnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "Workss!!",
                        Toast.LENGTH_LONG).show();
            }
        });


    }

    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
        ArrayList<Prediction> predictions = gestureLib.recognize(gesture);

        if (predictions.size() > 0 && predictions.get(0).score > 3.0) {
            String result = predictions.get(0).name;
            if ("turn".equalsIgnoreCase(result)) {
                Toast.makeText(this, "Reverse", Toast.LENGTH_LONG).show();
            } else if ("easteregg".equalsIgnoreCase(result)) {
                Toast.makeText(this, "EasterEgg", Toast.LENGTH_LONG).show();
                vvRick.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.rickroll));
                vvRick.start();
            } else{
                Toast.makeText(this, "FOUT", Toast.LENGTH_LONG).show();

            }
        }
    }
}
公共类MainActivity扩展AppCompatActivity实现GestureOverlayView.OnTesturePerformedListener{
手势库手势库;
视频视图;
私人按钮测试;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gestureLib=GestureLibraries.fromRawResource(this,R.raw.bities);
如果(!gestureLib.load()){
完成();
}
俯视gOverlay的手势=
(手势覆盖视图)findViewById(R.id.gOverlay);
gOverlay.addOnGesturePerformedListener(此);
vvRick=(VideoView)findviewbyd(R.id.vvRick);
btnTest=(按钮)findViewById(R.id.btnTest);
btnTest.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Toast.makeText(getApplicationContext(),“works!!”,
Toast.LENGTH_LONG).show();
}
});
}
已执行的检测的公共无效(手势覆盖视图覆盖、手势){
ArrayList predictions=gestureLib.recognize(手势);
if(predictions.size()>0&&predictions.get(0).score>3.0){
字符串结果=predictions.get(0).name;
如果(“转向”。相等信号情况(结果)){
Toast.makeText(此“反向”,Toast.LENGTH_LONG).show();
}else if(“easteregg.”等信号情况(结果)){
Toast.makeText(这是“EasterEgg”,Toast.LENGTH_LONG).show();
setVideoURI(Uri.parse(“android.resource://”+getPackageName()+“/”+R.raw.rickroll));
vvRick.start();
}否则{
Toast.makeText(这个“FOUT”,Toast.LENGTH_LONG).show();
}
}
}
}
布局文件

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

<VideoView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/vvRick"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:background="@android:color/transparent" />

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/home_container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/transparent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button Test"
        android:id="@+id/btnTest"
        android:layout_gravity="center" />

</FrameLayout>

<android.gesture.GestureOverlayView
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:id="@+id/gOverlay"
    android:minHeight="200dp"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:background="@android:color/transparent"></android.gesture.GestureOverlayView>

即使正确设置了合成矩阵并使用了旋转属性,VideoView也不支持视频旋转

您可以使用TextureView并设置其属性rotation=“90”(例如)。然后它将旋转帧,但纵横比是您需要自行处理的。为此,您可以使用textTureView.setScaleX((屏幕高度*1.0f)/screenWidth)

请阅读以下内容以了解更多信息:

最简单的方法是旋转
视频视图。否则,你需要提取每一帧,旋转它,然后将它们放在一起,创建一个视频。我曾经尝试过,但现在它根本不显示。不过我能听到视频的声音。