自定义Dialog设置全屏显示和背景透明
来源:互联网 发布:淘宝我的空间 编辑:程序博客网 时间:2024/05/16 15:24
因为公司业务需要,需要在每一个页面请求网络的时候,显示加载中的动画,当请求完毕时,需要隐藏动画,所以考虑自定义一个Dialog放在BaseActivity中,在BaseActivity中暴露出来两个方法,一个用于显示加载动画,一个用来隐藏加载动画。在这里考虑使用帧动画实现。
自定义Dialog的布局文件:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/loadingIv" android:layout_width="@dimen/dp_60" android:layout_height="@dimen/dp_60" android:layout_centerInParent="true" android:background="@drawable/animation_loading_running" /> <TextView android:id="@+id/loadingTv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/loadingIv" android:layout_centerInParent="true" android:textColor="@color/white" android:textSize="@dimen/sp_14" tools:text="正在加载中..." /></RelativeLayout>
效果图如下(动图略小。。。):
帧动画布局文件如下,其实就是7张连续的图片:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!--网络加载中动画-->
<item
android:drawable="@mipmap/ic_loading_run01"
android:duration="150" />
<item
android:drawable="@mipmap/ic_loading_run02"
android:duration="150" />
<item
android:drawable="@mipmap/ic_loading_run03"
android:duration="150" />
<item
android:drawable="@mipmap/ic_loading_run04"
android:duration="150" />
<item
android:drawable="@mipmap/ic_loading_run05"
android:duration="150" />
<item
android:drawable="@mipmap/ic_loading_run06"
android:duration="150" />
<item
android:drawable="@mipmap/ic_loading_run07"
android:duration="150" />
</animation-list>
自定义Dialog类如下:
package cn.oneday.customloadingdialog;import android.app.ProgressDialog;import android.content.Context;import android.graphics.drawable.AnimationDrawable;import android.os.Bundle;import android.widget.ImageView;import android.widget.TextView;/** * @Description:自定义加载框 */public class CustomProgressDialog extends ProgressDialog { private AnimationDrawable mAnimation; private Context mContext; private ImageView mImageView; private String mLoadingTip; private TextView mLoadingTv; private int mResid; public CustomProgressDialog(Context context, String content, int theme, int id) { super(context, theme); this.mContext = context; this.mLoadingTip = content; this.mResid = id; setCanceledOnTouchOutside(false);// 设置不能点击对话框外边取消当前对话框 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); initData(); } private void initData() { mImageView.setBackgroundResource(mResid); // 通过ImageView对象拿到背景显示的AnimationDrawable mAnimation = (AnimationDrawable) mImageView.getBackground(); // 为了防止在onCreate方法中只显示第一帧的解决方案之一 mImageView.post(new Runnable() { @Override public void run() { mAnimation.start(); } }); mLoadingTv.setText(mLoadingTip); } public void setContent(String str) { mLoadingTv.setText(str); } private void initView() { setContentView(R.layout.progress_loading_dialog); mLoadingTv = (TextView) findViewById(R.id.loadingTv); mImageView = (ImageView) findViewById(R.id.loadingIv); }}
在Activity中使用:
package cn.oneday.customloadingdialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Display;import android.view.WindowManager;public class MainActivity extends AppCompatActivity { private CustomProgressDialog customProgressDialog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); customProgressDialog = new CustomProgressDialog(this, "拼命加载中...", R.style.Dialog_Fullscreen, R.drawable.animation_loading_running); // customProgressDialog.setCancelable(false); // 设置不响应返回按钮点击事件 customProgressDialog.show(); // 动态设置自定义Dialog的显示内容的宽和高 WindowManager m = getWindowManager(); Display d = m.getDefaultDisplay(); //为获取屏幕宽、高 android.view.WindowManager.LayoutParams p = customProgressDialog.getWindow().getAttributes(); //获取对话框当前的参数值 p.height = (int) (d.getHeight() * 0.3); //高度设置为屏幕的0.3 p.width = d.getWidth(); //宽度设置为全屏 customProgressDialog.getWindow().setAttributes(p); //设置生效 }}
<?xml version="1.0" encoding="utf-8"?><resources> <!--加载进度对话框样式--> <style name="Dialog_Fullscreen"> <item name="android:windowFullscreen">true</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item><!--是否浮现在activity之上--> <item name="android:windowIsTranslucent">false</item><!--半透明--> <item name="android:windowBackground">@android:color/transparent</item><!--背景透明--> <item name="android:backgroundDimEnabled">true</item><!--模糊--> </style></resources>
以此记录,方便以后查阅,如有错误,请指正,万分感谢!
- 自定义Dialog设置全屏显示和背景透明
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置(转载)
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- Android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- android 自定义Dialog背景透明及显示位置设置
- bootstrap table
- RabbitMQ基础概念详细介绍
- iOS开发时如何获取当前设备的ip地址以及ip参数
- 如何求环的长度,入口点,链表的长度
- opencv提取外部轮廓并在外部加矩形框
- 自定义Dialog设置全屏显示和背景透明
- [C++排序模版]陶陶抢苹果
- Android LCM特殊分辨率时,360camera预览异常分析
- 注意的地方
- 仿微信朋友圈动态的时间显示
- 文章标题
- java语言基础07数组
- Math工具类相关
- Canvas绘图之PorterDuffXfermode