標籤:android 自訂dialog progressbar dialog動畫
Android項目中使用類似菊花的Dialog
一:
項目中使用的二:
1.首先定義動畫檔案
<?xml version="1.0" encoding="utf-8"?><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" />
2.在main.xml檔案中直接定義ProgressBar便可顯示
<?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="vertical" android:gravity="center"> <ProgressBar android:id="@+id/progress" style="?android:attr/progressBarStyleSmall" android:layout_width="25dip" android:layout_height="30dip" android:indeterminateDrawable="@anim/progress_bar" /></LinearLayout>
直接運行之後的效果即如一中所示!
但無法達到在項目中使用的便捷性,不可能每一個需要用到此Dialog的地方都需要在相應的xml檔案中定義該ProgressBar的控制項吧,如果開發中介面使用多層次的FrameLayout和多層次的布局,這就是個麻煩問題了。
下文將改 ProgressBar 單獨定義為一個xml,並通過定義單獨方法動態將其加入布局中,使用時直接通過基類的Activity初始化便可以在整個應用程式中調用。
第一步:
- 定義單獨的 layout_loading_dialog.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="@android:color/transparent" android:gravity="center_vertical|center" > <ProgressBar style="?android:attr/progressBarStyleSmall" android:layout_width="25dip" android:layout_height="30dip" android:indeterminateDrawable="@anim/progress_bar" /></LinearLayout>
註:此處為父布局添加 android:background="@android:color/transparent" 屬性,使布局透明。
第二步:
/** * 建立自訂ProgressDialog * * @param context * @return */ 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; }
第三步:
- 在調用時先在基類的BaseActiviy中初始化,然後在開始Request資料的回調方法中直接調用mLoading.show()
BaseActivity
package org.gaochun.ui;import android.app.Activity;import android.app.Dialog;import android.os.Bundle;/** * @author gao_chun * 該類為Activity基類 */public class BaseActivity extends Activity { public static final String TAG = "gao_chun"; //在基類中初始化Dialog public Dialog mLoading; /* (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /*if (!ValidateUtils.isNetworkAvailable(this)){ DialogUtils.showToast(this,R.string.text_network_unavailable); }*/ mLoading = DialogUtils.createLoadingDialog(this); }}
MainActivity
package org.gaochun.ui;import android.os.Bundle;import org.gaochun.R;public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setUpViews(); } private void setUpViews(){ setContentView(R.layout.main); /**************************************** * 只需要在此處調用show()方法 * 註:可在訪問網路開始時的回調方法中調用 * 在訪問結束後再 mLoading.dismiss(); **************************************/ mLoading.show(); }}
源碼下載:http://download.csdn.net/download/gao_chun/8631127
轉載請註明出處.
Android項目中使用類似菊花的Dialog