Android 自定义ProgressDialog示例实现
来源:互联网 发布:玩lol网络延迟怎么办 编辑:程序博客网 时间:2024/05/22 01:57
闲来无事,总结了两个自定义的ProgressDialog,大家可以参考下,根据自己需要进行选择修改:
实现效果:
示例1:
示例2:
代码如下:
MainActivity:只是两个Button点击事件
package com.customwaitdialog;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity implements OnClickListener {private Button btn_customDialog1;private Button btn_customDialog2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {btn_customDialog1 = (Button) findViewById(R.id.btn_customDialog1);btn_customDialog2 = (Button) findViewById(R.id.btn_customDialog2);btn_customDialog1.setOnClickListener(this);btn_customDialog2.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {// 示例1case R.id.btn_customDialog1:Intent intent1 = new Intent(this, DialogActivity1.class);startActivity(intent1);break;// 示例2case R.id.btn_customDialog2:Intent intent2 = new Intent(this, DialogActivity2.class);startActivity(intent2);break;default:break;}}}
示例1DialogActivity1:
package com.customwaitdialog;import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import com.dialogutil.CustomWaitDialog1;public class DialogActivity1 extends Activity {private MainFrameTask mMainFrameTask = null;private CustomWaitDialog1 progressDialog = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity1);mMainFrameTask = new MainFrameTask(this);mMainFrameTask.execute();}@Overrideprotected void onDestroy() {stopProgressDialog();if (mMainFrameTask != null && !mMainFrameTask.isCancelled()) {mMainFrameTask.cancel(true);}super.onDestroy();}private void startProgressDialog() {if (progressDialog == null) {progressDialog = CustomWaitDialog1.createDialog(this);progressDialog.setMessage("正在加载中...");}progressDialog.show();}private void stopProgressDialog() {if (progressDialog != null) {progressDialog.dismiss();progressDialog = null;}}public class MainFrameTask extends AsyncTask<Integer, String, Integer> {private DialogActivity1 mainFrame = null;public MainFrameTask(DialogActivity1 mainFrame) {this.mainFrame = mainFrame;}@Overrideprotected void onCancelled() {stopProgressDialog();super.onCancelled();}@Overrideprotected Integer doInBackground(Integer... params) {try {Thread.sleep(10 * 1000);} catch (InterruptedException e) {e.printStackTrace();}return null;}@Overrideprotected void onPreExecute() {startProgressDialog();}@Overrideprotected void onPostExecute(Integer result) {stopProgressDialog();}}}
重点来了CustomWaitDialog1:
package com.dialogutil;import android.app.Dialog;import android.content.Context;import android.graphics.drawable.AnimationDrawable;import android.view.Gravity;import android.widget.ImageView;import android.widget.TextView;import com.customwaitdialog.R;public class CustomWaitDialog1 extends Dialog {private Context context = null;private static CustomWaitDialog1 customProgressDialog = null;public CustomWaitDialog1(Context context) {super(context);this.context = context;}public CustomWaitDialog1(Context context, int theme) {super(context, theme);}public static CustomWaitDialog1 createDialog(Context context) {customProgressDialog = new CustomWaitDialog1(context,R.style.CustomProgressDialog);customProgressDialog.setCanceledOnTouchOutside(false);customProgressDialog.setContentView(R.layout.customprogressdialog);customProgressDialog.getWindow().getAttributes().gravity = Gravity.CENTER;return customProgressDialog;}public void onWindowFocusChanged(boolean hasFocus) {if (customProgressDialog == null) {return;}ImageView imageView = (ImageView) customProgressDialog.findViewById(R.id.loadingImageView);AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();animationDrawable.start();}public CustomWaitDialog1 setTitile(String strTitle){ return customProgressDialog; } public CustomWaitDialog1 setMessage(String strMessage){ TextView tvMsg = (TextView)customProgressDialog.findViewById(R.id.id_tv_loadingmsg); if (tvMsg != null){ tvMsg.setText(strMessage); } return customProgressDialog; } }
style:
<resources> <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme.Light"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowNoTitle">true</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name="common_dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowIsFloating">true</item> <!-- 设置未浮动窗口 --> <item name="android:windowFrame">@null</item> <!-- 设置无边框 --> <item name="android:windowNoTitle">true</item> <!-- 设置无标题 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 设置完全透明 --> <item name="android:backgroundDimEnabled">false</item> <!-- 设置屏幕变暗 --> </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="CustomProgressDialog" 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="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <ImageView android:id="@+id/loadingImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@anim/progress_round"/> <TextView android:id="@+id/id_tv_loadingmsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textSize="20dp"/></LinearLayout>
旋转动画:progress_round.xml:
<?xml version="1.0" encoding="utf-8"?><animation-listxmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/progress_1" android:duration="200"/> <item android:drawable="@drawable/progress_2" android:duration="200"/> <item android:drawable="@drawable/progress_3" android:duration="200"/> <item android:drawable="@drawable/progress_4" android:duration="200"/> <item android:drawable="@drawable/progress_5" android:duration="200"/> <item android:drawable="@drawable/progress_6" android:duration="200"/> <item android:drawable="@drawable/progress_7" android:duration="200"/> <item android:drawable="@drawable/progress_8" android:duration="200"/></animation-list>
示例2DialogActivity2:
package com.customwaitdialog;import android.app.Activity;import android.content.DialogInterface;import android.content.DialogInterface.OnDismissListener;import android.os.Bundle;import com.dialogutil.CustomWaitDialog2;public class DialogActivity2 extends Activity {private CustomWaitDialog2 waitDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity2); waitDialog = new CustomWaitDialog2(this); waitDialog.show(); waitDialog.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { } });}}
等待Dialog:CustomWaitDialog2:
package com.dialogutil;import android.app.Dialog;import android.content.Context;import android.content.DialogInterface;import android.view.Window;import android.view.WindowManager;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.ImageView;import com.customwaitdialog.R;public class CustomWaitDialog2 {private Context mContext;private ImageView image;private ImageView loading_pic_bigView;private Dialog waitDialog;private Animation mAnimation;public CustomWaitDialog2(Context mContext) {this.mContext = mContext;waitDialog = new Dialog(mContext, R.style.common_dialog);waitDialog.setContentView(R.layout.loading);waitDialog.setCanceledOnTouchOutside(false);/** * 设置幕布,也就是本dialog的背景层 dimAmount在0.0f和1.0f之间,0.0f完全不暗,即背景是可见的 * ,1.0f时候,背景全部变黑暗。 * * 如果要达到背景全部变暗的效果,需要设置 * dialog.getWindow().addFlags(WindowManager.LayoutParams * .FLAG_DIM_BEHIND); ,否则,背景无效果。 */Window window = waitDialog.getWindow();WindowManager.LayoutParams lp = window.getAttributes();lp.dimAmount = 0.8f;window.setAttributes(lp);window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);// waitDialog.getWindow().getAttributes().gravity = Gravity.CENTER;/** * 设置透明度,主要设置的是dialog自身的透明度 */loading_pic_bigView = (ImageView) waitDialog.findViewById(R.id.loading_pic_bigView);loading_pic_bigView.setAlpha(0.6f);image = (ImageView) waitDialog.findViewById(R.id.loading_pic_big);mAnimation = AnimationUtils.loadAnimation(mContext, R.anim.loading);}public void show() {image.startAnimation(mAnimation);waitDialog.show();}public void dismiss() {waitDialog.dismiss();}//用于网络请求中断操作public void setOnDismissListener(DialogInterface.OnDismissListener dismissListener) {waitDialog.setOnDismissListener(dismissListener);}}
布局loading:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="80.0dip" android:layout_height="80.0dip" > <ImageView android:id="@+id/loading_pic_bigView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/loading_gray" /> <ImageView android:id="@+id/loading_pic_big" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/operating" /></FrameLayout>
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:duration="2000" android:fromDegrees="0.0" android:toDegrees="359.0" android:pivotX="50.0%" android:pivotY="50.0%" android:repeatCount="infinite" /></set>
参考下源码:
点击下载源码
1 0
- Android 自定义ProgressDialog示例实现
- android 自定义progressDialog实现
- android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- Android 自定义progressDialog实现
- android 自定义progressDialog实现
- Android 自定义progressDialog实现
- android 自定义progressDialog实现
- Android 自定义progressDialog实现
- android 自定义progressDialog实现
- android 自定义progressDialog实现
- Leetcode 23 Merge k Sorted Lists
- python-redis
- java标识符命名规则
- 基于jdk在windows 终端编译java 程序时输出中文时出现乱码情况
- error: Apostrophe not preceded by \ (in ...)
- Android 自定义ProgressDialog示例实现
- Caused by: java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/
- 关于C++中函数指针的使用
- 使用Google Closure Compiler高级压缩Javascript代码
- 黑盒测试和白盒测试区别
- CSS 设置背景颜色渐变
- 内存管理
- Android中GridView的使用方法
- UIView的layoutSubviews和drawRect