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);
所以当我点击 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);