首先我们看一下什么叫做透明的进度对话框:
接下来我们讲一下如何创建: 1、使用Eclipse创建一个新的Android 项目,使用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、以下是实现透明动画的代码
private class TransparentProgressDialog extends Dialog {
private ImageView iv;
public TransparentProgressDialog(Context context, int resourceIdOfImage) { super(context, R.style.TransparentProgressDialog); WindowManager.LayoutParams wlmp = getWindow().getAttributes(); wlmp.gravity = Gravity.CENTER_HORIZONTAL; getWindow().setAttributes(wlmp); setTitle(null); setCancelable(false); setOnCancelListener(null); LinearLayout layout = new LinearLayout(context); layout.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 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); } }
最后的结果是
|