通过继承Dialog+帧动画实现自定义透明背景ProgressDialog。
下载资源地址:http://download.csdn.net/download/shenyuanqing/8984687
效果动画:
CommProgressDialog:
package com.example.administrator.progressdialog; import android.app.Dialog; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.view.Gravity; import android.view.KeyEvent; import android.widget.ImageView; import android.widget.TextView; /** * Created by Administrator on 2015/7/29. */ public class CommProgressDialog extends Dialog { private Context context = null; private int anim=0; private static CommProgressDialog commProgressDialog = null; public CommProgressDialog(Context context){ super(context); this.context = context; } public CommProgressDialog(Context context, int theme, int anim) { super(context, theme); this.anim=anim; } public static CommProgressDialog createDialog(Context context,int anim){ commProgressDialog = new CommProgressDialog(context, R.style.CommProgressDialog ,anim); commProgressDialog.setContentView(R.layout.comm_progress_dialog); commProgressDialog.getWindow().getAttributes().gravity = Gravity.CENTER; return commProgressDialog; } public void onWindowFocusChanged(boolean hasFocus){ if (commProgressDialog == null){ return; } ImageView imageView = (ImageView) commProgressDialog.findViewById(R.id.iv_loading); if(anim!=0) { imageView.setBackgroundResource(anim); } AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground(); animationDrawable.start(); } /** * 设置标题 * @param strTitle * @return */ public CommProgressDialog setTitile(String strTitle){ return commProgressDialog; } /** * 设置提示内容 * @param strMessage * @return */ public CommProgressDialog setMessage(String strMessage){ TextView tvMsg = (TextView)commProgressDialog.findViewById(R.id.tv_loading_msg); if (tvMsg != null){ tvMsg.setText(strMessage); } return commProgressDialog; } /**屏蔽返回键**/ @Override public boolean onKeyDown(int keyCode,KeyEvent event){ if(keyCode==KeyEvent.KEYCODE_BACK) return true; return super.onKeyDown(keyCode, event); } }
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> </style> <style name="CustomDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> </style> <style name="CommProgressDialog" parent="@style/CustomDialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> </style> </resources>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:id="@+id/iv_loading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@anim/default_anim" android:layout_gravity="center"/> <TextView android:id="@+id/tv_loading_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="5dp" android:textSize="16dp"/> </LinearLayout>
<?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/loading_1" android:duration="150"></item> <item android:drawable="@mipmap/loading_2" android:duration="150"></item> <item android:drawable="@mipmap/loading_3" android:duration="150"></item> <item android:drawable="@mipmap/loading_4" android:duration="150"></item> <item android:drawable="@mipmap/loading_5" android:duration="150"></item> <item android:drawable="@mipmap/loading_6" android:duration="150"></item> <item android:drawable="@mipmap/loading_7" android:duration="150"></item> <item android:drawable="@mipmap/loading_8" android:duration="150"></item> <item android:drawable="@mipmap/loading_9" android:duration="150"></item> <item android:drawable="@mipmap/loading_10" android:duration="150"></item> <item android:drawable="@mipmap/loading_11" android:duration="150"></item> <item android:drawable="@mipmap/loading_12" android:duration="150"></item> </animation-list>
<?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/chrysanthemum_1" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_2" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_3" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_4" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_5" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_6" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_7" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_8" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_9" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_10" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_11" android:duration="150"></item> <item android:drawable="@mipmap/chrysanthemum_12" android:duration="150"></item> </animation-list>
package com.example.administrator.progressdialog; import android.app.Activity; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { private CommProgressDialog progressDialog=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.bt_show).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (progressDialog == null) { progressDialog = CommProgressDialog.createDialog(MainActivity.this, R.anim.my_anim); } progressDialog.setMessage("Loading..."); progressDialog.show(); } }); } }