Android 如何让 gif 动图在屏幕中央和前面像 'ProgressDialog'?

Android how to get a gif in the center of the screen and to the front like a 'ProgressDialog'?

所以当我点击 activity 时,我想显示一个正在加载的 gif,而不是 'ProgessDialog',但是我怎样才能把它放在屏幕中央和前面不替换其他对象?

有一个很棒的库,叫做 andorid-gif-drawable

将库添加到您的项目后,您想这样做:

<pl.droidsonroids.gif.GifImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" android:src="@drawable/src_drawable_here" />

确保它位于允许父级居中(即水平和垂直居中)的布局内,例如 RelativeLayout。

我是这样做的:

    <FrameLayout> <!-- this can also be a CoordinatorLayout -->

        ... (content)


        <FrameLayout
            android:id="@+id/scrim"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/dark_translucent"
            android:visibility="gone">

            <ProgressBar
                android:id="@+id/progressBar"
                style="@style/Widget.AppCompat.ProgressBar.Horizontal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="24dp"
                android:indeterminate="true"/>

        </FrameLayout>
    </FrameLayout>

这与加载器结合使用。当加载程序启动时,我将稀松布可见性设置为 visible。装载程序完成后,我将稀松布可见性设置回 gone.

几件事:

  • 您应该跟踪稀松布在保存的实例状态中是否可见,因此如果用户在加载程序进行时旋转设备,您可以立即再次显示稀松布 onCreate.

  • 如果您要覆盖可触摸控件,您应该禁用所有控件直到完成。或者,您可以在稀松布布局上设置 onTouchListener 以消耗触摸事件,从而有效地禁用内容控件。

<FrameLayout
        android:id="@+id/scrim"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/dark_translucent"
        android:visibility="gone">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="24dp"/>

    </FrameLayout>
</FrameLayout>

添加到您的 build.gradle(Module.app)

dependencies {
     compile 'com.github.bumptech.glide:glide:3.6.1'
}

在你的Activity

    Glide.with(this)
            .load(imageGif)
            .asGif()
            .fitCenter()
            .crossFade()
            .into(imageView);