1. 程式人生 > >Android透明圓形進度條對話方塊的設定

Android透明圓形進度條對話方塊的設定

首先我們看一下Android自帶的圓形進度對話方塊:
這裡寫圖片描述
接下來我們講一下如何建立:
1、使用Eclipse建立一個新的Andr​​oid 專案,使用Android 2.2或以上。
2、在/res/layout資料夾,建立線性佈局activity_main.xml檔案,主要是為了新增一個文字標籤和一個按鈕

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height
="match_parent" android:orientation="vertical">
<TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:padding="8dp" android:textSize="20sp" android:text="Transparent Progress Indicator"
/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Check it out!" android:layout_marginTop="40dp" android:layout_gravity="center" android:id="@+id/the_button" /> </LinearLayout>

3、在/res/values中開啟styles.xml,在這裡將新增透明對話方塊的樣式。請務必指定父屬性,否則你在執行時會出現問題

styles.xml
<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">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
    <!--  Transparent dialog -->
    <style name="TransparentProgressDialog" parent="@android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowTitleStyle">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:background">@android:color/transparent</item>
    </style>
</resources>

4、 在/res中間新增一個動態旋轉的動畫圖片:
這裡寫圖片描述
5、現在可以實現您的MainActivity.java檔案了

MainActivity.java
package com.authorwjf.transparentprogressdialog;
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements OnClickListener {
 private TransparentProgressDialog pd;
 private Handler h;
 private Runnable r;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  h = new Handler();
  pd = new TransparentProgressDialog(this, R.drawable.spinner);
  r =new Runnable() {
   @Override
   public void run() {
    if (pd.isShowing()) {
     pd.dismiss();
    }
   }
  };
  findViewById(R.id.the_button).setOnClickListener(this);
 }
 @Override
 public void onClick(View v) {
  pd.show();
  h.postDelayed(r,5000);
 }
 @Override
 protected void onDestroy() {
  h.removeCallbacks(r);
  if (pd.isShowing() ) {
   pd.dismiss();
  }
  super.onDestroy();
 }
}

6、以下是實現透明動畫的程式碼

package com.example.circleprogressbar;

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TransparentProgressDialog extends Dialog {
 private ImageView iv;
 public TransparentProgressDialog(Context context, int resourceIdOfImage) {
  super(context, R.style.TransparentProgressDialog);

    setTitle(null);
    setCancelable(false);
    setOnCancelListener(null);
    LinearLayout layout = new LinearLayout(context);
    layout.setOrientation(LinearLayout.VERTICAL);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(80, 80);
    iv = new ImageView(context);
    iv.setImageResource(resourceIdOfImage);
    layout.addView(iv, params);
    addContentView(layout, params);

 }

 @Override
 public void show() {
      super.show();
      RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f);
      anim.setInterpolator(new LinearInterpolator());
      anim.setRepeatCount(Animation.INFINITE);
      anim.setDuration(3000);
      iv.setAnimation(anim);
      iv.startAnimation(anim);

 }
}

最後的結果是
這裡寫圖片描述