自定义“菊花dialog”

原创 2015年07月07日 16:00:10

参考文章:http://www.androidchina.net/2297.html


在原文的基础上,只做了少量修改,就是把两个类合成了一个类,并且加上了五秒之后dialog被dismiss的两种方法。


1.首先是动画文件 :一张图片360一直旋转

<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/loading2"
    android:fromDegrees="0.0"
    android:pivotX="50.0%"
    android:pivotY="50.0%"
    android:toDegrees="360.0" />

注:此处为父布局添加 android:background=”@android:color/transparent” 属性,使布局透明。


2.自定义方法加载dialog

public class DialogUtils {
	/**
	 * 创建自定义ProgressDialog
	 */
	public static Dialog createLoadingDialog(Context context) {
		LayoutInflater inflater = LayoutInflater.from(context);
		View v = inflater.inflate(R.layout.layout_loading_dialog, null); // 得到加载view
		LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view); // 加载布局
		Dialog loadingDialog = new Dialog(context, R.style.loading_dialog); // 创建自定义样式dialog
		loadingDialog.setCancelable(false); // 不可以用"返回键"取消
		loadingDialog.setContentView(layout, new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.WRAP_CONTENT,
				LinearLayout.LayoutParams.WRAP_CONTENT));
		return loadingDialog;
	}
}
注:此方法中设置了  loadingDialog.setCancelable(false);  即:不可以用”返回键”取消,若不需要可注释掉。


3.主类

public class MainActivity extends Activity {
	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			switch (msg.what) {
			case 1:
				mLoading.dismiss();
				break;
			}
		};
	};
	Handler handler2 = new Handler();

	// 初始化Dialog
	public Dialog mLoading;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		mLoading = DialogUtils.createLoadingDialog(this);
		setUpViews();
	}

	private void setUpViews() {
		/****************************************
		 * 只需要在此处调用show()方法
		 * 注: 可在访问网络开始时的回调方法中调用 在访问结束后; 
		 * 再 mLoading.dismiss();
		 ****************************************/
		mLoading.show();
		handler.postDelayed(new Runnable() {

			@Override
			public void run() {
				mLoading.dismiss();
			}
		}, 5000);
		// new Thread(new Runnable() {
		//
		// @Override
		// public void run() {
		// while (true) {
		// // mLoading.show();
		// try {
		// Thread.sleep(5000);
		// } catch (InterruptedException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		// Message msg = new Message();
		// msg.what = 1;
		// handler.sendMessage(msg);
		// // mLoading.dismiss();
		// }
		// }
		// }).start();
	}
}
不用handler,直接用线程五秒之后执行dismiss操作的话,就会崩掉。

一个是用handler发送message,在handler中执行dismiss操作。

而是利用handler的postDelayed(Runnable r, long delayMillis)方法,在线程中执行dismiss操作。

styles.xml文件部分:

 <!-- 自定义loading dialog -->
    <style name="loading_dialog" parent="android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>
dialog_view.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/dialog_bg"
    android:gravity="center_vertical|center"
    android:orientation="vertical"
    android:padding="10dp" >

    <ProgressBar
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="50dip"
        android:layout_height="60dip"
        android:indeterminateDrawable="@anim/progress_bar" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="激活中..."
        android:textColor="#FFFFFF"
        android:textSize="25sp" />

</LinearLayout>


现在添加一个圆形的进度条文件:

<style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">#00000000</item>
        <item name="android:windowBackground">@drawable/dialogbk</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

romacting.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="200dp"
    android:layout_height="200dp" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_margin="30dp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/progressBar1"
        android:layout_centerHorizontal="true"
        android:text="@string/romacting"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

dialogbk.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 上面两个方角,下面两个圆角 -->
    <!-- 背景 -->
    <gradient
        android:angle="270"
        android:endColor="#a2afbc"
        android:startColor="#697585" >
    </gradient>
    <!-- 边界线 -->
    <stroke
        android:width="3dp"
        android:color="#606060"/>

    <corners android:radius="10dp" >
    </corners>

</shape>


MainActivity类

public class MainActivity extends Activity {
        // 无关代码全部删掉,刷掉dialog依旧是dismiss()方法。
<span style="white-space:pre">	</span>// 点击按钮触发事件,启动dialog进度条,可以在xml文件中按钮处加上一个属性,android:onClick="onRomact"
<span style="white-space:pre">	</span>// 这样点就按钮依旧可以启动相应 的事件
	public Dialog waiting = null
	public void onRomact(View v) {
		Log.i(TEST_TAG, "555555"); // 2
		waiting = new Dialog(this, R.style.dialog);
		waiting.setCancelable(false);
		waiting.setContentView(R.layout.romacting);
		waiting.show();
		new Timer().schedule(new TimerTask() {

			@Override
			public void run() {
				ready = true;
				mHand.sendEmptyMessage(0);
			}
		}, 1000 * 10);
	}

}








版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android自定义View——菊花进度条

当你看完这篇博客过后,相信你已经可以摸到自定义View的门道了,本篇博客将带你走一遍自定义View之旅废话不多说先上效果图。实现思路1. 创建attrs.xml文件,自定义一些我们需要的属性,对于fo...
  • a_zhon
  • a_zhon
  • 2016-11-12 21:40
  • 3927

项目储备--BaseActivity中Activity管理与全局小菊花dialog

public abstract class BaseActivity extends AppCompatActivity { /** * 记录处于前台的Activity *...
  • wkaia
  • wkaia
  • 2016-12-30 10:00
  • 146

自定义Dialog

  • 2016-04-07 14:13
  • 1.49MB
  • 下载

自定义dialog

  • 2016-12-06 12:27
  • 2.74MB
  • 下载

自定义Dialog;Notification;PopupWindow;DatePickerDialog;TimePickerDialog

自定义Dialog my_title.xml <corners android:topLeftRadius="@dimen/corner" andro

自定义动画dialog

  • 2016-01-14 13:59
  • 683KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)