Как я могу сделать анимированный GIF-дисплей поверх предварительного просмотра камеры в TextureView - PullRequest
0 голосов
/ 21 января 2020

Это моя первая попытка Android приложения в качестве веб-разработчика. Пока у меня есть RelativeView в приложении Xamarin Android. Я могу отобразить кнопку .png со слоем прозрачности поверх предварительного просмотра камеры, переданного в TextureView. Эта часть работает как ожидалось. Однако я использую аналогичный подход для отображения анимированного GIF-файла, и он, похоже, отрисовывается за TextureView. Анимация GIF воспроизводится один раз, после чего отображается текстура, и я больше не вижу анимированный GIF. Желаемое поведение будет для GIF до l oop при отображении поверх TextureView. Я использую библиотеку Refactored.GifImageView для отображения анимации GIF.

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:id="@+id/container"
    android:minHeight="25px">

    <Test_DesignerView.AutoFitTextureView
        android:id="@+id/texture"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true" />

    <com.felipecsl.gifimageview.library.GifImageView
        android:id="@+id/InProg"
        android:layout_gravity="left"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <Button
        android:id="@+id/RecButton"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:padding="10dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="80dp"
        android:layout_centerHorizontal="true"
        android:background="@drawable/rec_button" />

</RelativeLayout>

Метод OnCreate

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);
    Xamarin.Essentials.Platform.Init(this, savedInstanceState);
    var requiredPermissions = new String[] { Manifest.Permission.Camera };  
    SetContentView(Resource.Layout.activity_main);
    var btn = FindViewById<Button>(Resource.Id.RecButton);
    gifImageView = FindViewById<GifImageView>(Resource.Id.InProg);
    Stream input = Resources.OpenRawResource(Resource.Drawable.InProg);
    byte[] bytes = ConvertByteArray(input);
    gifImageView.SetBytes(bytes);
    gifImageView.StartAnimation();
    gifImageView.Visibility = ViewStates.Visible;

    if (null == savedInstanceState)
    {
        FragmentManager.BeginTransaction()
            .Replace(Resource.Id.container, CameraFragment.newInstance())
            .Commit();
    }
}

screenshot showing the camera preview with a .png button overlayed while not displaying the animated GIF

...