Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android——可视页面内视频侧面的垂直黑条_Android_Video_Xamarin_Xamarin.android_Android Viewpager - Fatal编程技术网

Android——可视页面内视频侧面的垂直黑条

Android——可视页面内视频侧面的垂直黑条,android,video,xamarin,xamarin.android,android-viewpager,Android,Video,Xamarin,Xamarin.android,Android Viewpager,我目前正在Xamarin.Android中开发一个应用程序。 在这个应用程序中,我使用了几个viewpager,从昨天开始我就没有遇到过任何问题 在我的应用程序开始时,我得到了一种动画巡演,这是一个包含ViewPager的简单活动,它使用4个片段(每个片段中有一个视频),因此我们可以水平滚动以继续巡演。下面您可以看到它的屏幕截图: 但是我的问题出现在所有不在安卓7上的安卓设备上(安卓4和之前的版本不受支持,所以我的问题只出现在安卓5和6上)。当我在这个ViewPager上水平滚动时,每个视频的

我目前正在Xamarin.Android中开发一个应用程序。 在这个应用程序中,我使用了几个viewpager,从昨天开始我就没有遇到过任何问题

在我的应用程序开始时,我得到了一种动画巡演,这是一个包含ViewPager的简单活动,它使用4个片段(每个片段中有一个视频),因此我们可以水平滚动以继续巡演。下面您可以看到它的屏幕截图:

但是我的问题出现在所有不在安卓7上的安卓设备上(安卓4和之前的版本不受支持,所以我的问题只出现在安卓5和6上)。当我在这个ViewPager上水平滚动时,每个视频的左右两侧都会出现一些黑色的条带。我想这不会发生在Android 7上,因为该操作系统可以更好地管理视频。下面是一个例子:

在这里,我的视频占据了100%的屏幕空间,但当视频变小时,也会发生这种情况,我缩小了其中一个视频的大小以向您展示:

那些黑条不是固定的,我的意思是当我水平滚动时,它们会在屏幕上随机移动。我把几乎所有东西的背景色都用白色,但没有效果。我真的认为这是Android在屏幕上移动视频时遇到的困难,而这个视频仍在播放。但这太难看了,它提供了一个糟糕的用户体验,这对于我和我的团队能够解决这个问题非常重要

如果代码对您有帮助,请参阅以下代码:

animated_tour.axml(活动的axml)


AnimatedTourActivity.cs(活动类)

[活动(Label=“AnimatedTourActivity”,Theme=“@style/AppTheme”)]
公共类AnimatedTourActivity:AppCompatActivity
{
公共动画TourViewModel虚拟机
{
得到
{
返回App.Locator.AnimatedTour;
}
}
私用阅览器(ViewPager);;
公共浏览页面浏览页面
{
得到
{
返回此。_viewPager??(此。_viewPager=this.findviewbyd(Resource.Id.vp_animated_tour));
}
}
创建时受保护的覆盖无效(Bundle savedInstanceState)
{
SetContentView(Resource.Layout.animated_-tour);
base.OnCreate(savedInstanceState);
SetFlags(Android.Views.WindowManagerFlags.Fullscreen、Android.Views.WindowManagerFlags.Fullscreen);
//论bloque-en模式肖像画
RequestedOrientation=Android.Content.PM.ScreenOrientation.grait;
this.ViewPager.Adapter=新的动画TorAdapter(this.SupportFragmentManager);

如果(Android.OS.Build.VERSION.SdkInt
VideoView
扩展了
SurfaceView
SurfaceView
的主要限制是它不适合翻译、动画和移动,这可能会导致您的问题

您需要的是基于
TextureView
的视频播放器。您可以尝试搜索第三方库

或者您也可以尝试自己创建这样一个,以下是一些您可以参考的Java资源:


.

非常感谢!我使用了您在答案中输入的第一个链接,并将代码从Java翻译为C。现在一切都好了!
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/vp_animated_tour"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" />
[Activity(Label = "AnimatedTourActivity", Theme = "@style/AppTheme")]
public class AnimatedTourActivity : AppCompatActivity
{

    public AnimatedTourViewModel Vm
    {
        get
        {
            return App.Locator.AnimatedTour;
        }
    }

    private ViewPager _viewPager;

    public ViewPager ViewPager
    {
        get
        {
            return this._viewPager ?? (this._viewPager = this.FindViewById<ViewPager>(Resource.Id.vp_animated_tour));
        }
    }

    protected override void OnCreate(Bundle savedInstanceState)
    {
        SetContentView(Resource.Layout.animated_tour);
        base.OnCreate(savedInstanceState);

        Window.SetFlags(Android.Views.WindowManagerFlags.Fullscreen, Android.Views.WindowManagerFlags.Fullscreen);

        // On bloque en mode portrait
        RequestedOrientation = Android.Content.PM.ScreenOrientation.Portrait;
        this.ViewPager.Adapter = new AnimatedTourAdapter(this.SupportFragmentManager);

        if (Android.OS.Build.VERSION.SdkInt <= BuildVersionCodes.Lollipop)
            this.ViewPager.OffscreenPageLimit = 1;
        else
            this.ViewPager.OffscreenPageLimit = 3;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white">
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <FrameLayout
            android:id="@+id/placeholder"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white" />
        <VideoView
            android:id="@+id/vv_animated_tour_2"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            android:layout_width="match_parent" />
    </FrameLayout>
    <LinearLayout
        android:id="@+id/ll_animated_tour_description"
        android:layout_marginTop="350dp"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:textSize="23dp"
            android:fontFamily="fonts/AvenirLTStd-Book.otf"
            android:textColor="@color/general_text_color_grey"
            android:text="@string/animated_tour_family_management" />
        <TextView
            android:layout_marginTop="15dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:paddingRight="33dp"
            android:paddingLeft="33dp"
            android:textSize="19.5dp"
            android:fontFamily="fonts/AvenirLTStd-Book.otf"
            android:textColor="@color/animated_tour_description"
            android:text="@string/animated_tour_family_management_description" />
    </LinearLayout>
    <ImageView
        android:layout_alignParentBottom="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="100dp"
        android:background="@drawable/DOTS_2" />
</RelativeLayout>
public class AnimatedTourFragment : SupportV4.Fragment
{
    static AnimatedTourFragment fragment;

    private const string TEMPLATED_ANIMATED_TOUR_RESOURCE_ID = "resource_id";
    private const string TEMPLATED_ANIMATED_TOUR_VIDEO_RESOURCE_ID = "video_resource_id";
    private const string TEMPLATED_ANIMATED_TOUR_NUMBER = "number";


    public AnimatedTourFragment()
    {

    }

    public static AnimatedTourFragment NewInstance(int number, int resourceId, int videoResourceId)
    {
        fragment = new AnimatedTourFragment();
        Bundle args = new Bundle();

        args.PutInt(TEMPLATED_ANIMATED_TOUR_RESOURCE_ID, resourceId);
        args.PutInt(TEMPLATED_ANIMATED_TOUR_NUMBER, number);
        args.PutInt(TEMPLATED_ANIMATED_TOUR_VIDEO_RESOURCE_ID, videoResourceId);


        fragment.Arguments = args;

        return fragment;
    }


    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        //return base.OnCreateView(inflater, container, savedInstanceState);
        var resourceId = Arguments.GetInt(TEMPLATED_ANIMATED_TOUR_RESOURCE_ID, 0);
        var number = Arguments.GetInt(TEMPLATED_ANIMATED_TOUR_NUMBER, 1);
        var videoResourceId = Arguments.GetInt(TEMPLATED_ANIMATED_TOUR_VIDEO_RESOURCE_ID, 0);

        var view = inflater.Inflate(resourceId, container, false);

        var videoViewId = this.Activity.Resources.GetIdentifier(string.Format("vv_animated_tour_{0}", number), "id", this.Activity.PackageName);

        var videoView = view.FindViewById<VideoView>(videoViewId);
        videoView.SetOnPreparedListener(new VideoLoop());
        videoView.SetVideoURI(Android.Net.Uri.Parse("android.resource://" + this.Activity.PackageName + "/" + videoResourceId));
        videoView.Start();

        var goButton = view.FindViewById<Button>(Resource.Id.bt_animated_tour_go);
        goButton?.SetCommand("Click", (this.Activity as AnimatedTourActivity).Vm.NavigateToHomeCommand);

        return view;
    }

}


public class VideoLoop : Java.Lang.Object, Android.Media.MediaPlayer.IOnPreparedListener
{
    public void OnPrepared(MediaPlayer mp)
    {
        mp.Looping = true;
    }

}