Android中创建一个透明的进度对话框实例
首先我们看一下什么叫做透明的进度对话框:
接下来我们讲一下如何创建:
1、使用Eclipse创建一个新的Android项目,使用Android2.2或以上。
2、在/res/layout文件夹,创建线性布局activity_main.xml文件,主要是为了添加一个文本标签和一个按钮
activity_main.xml
<LinearLayoutxmlns: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="TransparentProgressIndicator"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Checkitout!"
android:layout_marginTop="40dp"
android:layout_gravity="center"
android:id="@+id/the_button"/>
</LinearLayout>
3、在/res/values中打开styles.xml,在这里将添加透明对话框的样式。请务必指定父属性,否则你在运行时会出现问题
styles.xml
<resources>
<!--
Baseapplicationtheme,dependentonAPIlevel.Thisthemeisreplaced
byAppBaseThemefromres/values-vXX/styles.xmlonnewerdevices.
-->
<stylename="AppBaseTheme"parent="android:Theme.Light">
<!--
ThemecustomizationsavailableinnewerAPIlevelscangoin
res/values-vXX/styles.xml,whilecustomizationsrelatedto
backward-compatibilitycangohere.
-->
</style>
<!--Applicationtheme.-->
<stylename="AppTheme"parent="AppBaseTheme">
<!--AllcustomizationsthatareNOTspecifictoaparticularAPI-levelcangohere.-->
</style>
<!-- Transparentdialog-->
<stylename="TransparentProgressDialog"parent="@android:Theme.Dialog">
<itemname="android:windowFrame">@null</item>
<itemname="android:windowBackground">@android:color/transparent</item>
<itemname="android:windowIsFloating">true</item>
<itemname="android:windowContentOverlay">@null</item>
<itemname="android:windowTitleStyle">@null</item>
<itemname="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<itemname="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<itemname="android:backgroundDimEnabled">true</item>
<itemname="android:background">@android:color/transparent</item>
</style>
</resources>
4、在/res中间添加一个动态旋转的动画图片:
5、现在可以实现您的MainActivity.java文件了
importandroid.os.Bundle; publicclassMainActivityextendsActivityimplementsOnClickListener{ privateTransparentProgressDialogpd; @Override @Override @Override } 6、以下是实现透明动画的代码 privateImageViewiv; publicTransparentProgressDialog(Contextcontext,intresourceIdOfImage){ @Override 最后的结果是
MainActivity.java
packagecom.authorwjf.transparentprogressdialog;
importandroid.os.Handler;
importandroid.app.Activity;
importandroid.app.Dialog;
importandroid.content.Context;
importandroid.view.Gravity;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.ViewGroup.LayoutParams;
importandroid.view.WindowManager;
importandroid.view.animation.Animation;
importandroid.view.animation.LinearInterpolator;
importandroid.view.animation.RotateAnimation;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
privateHandlerh;
privateRunnabler;
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
h=newHandler();
pd=newTransparentProgressDialog(this,R.drawable.spinner);
r=newRunnable(){
@Override
publicvoidrun(){
if(pd.isShowing()){
pd.dismiss();
}
}
};
findViewById(R.id.the_button).setOnClickListener(this);
}
publicvoidonClick(Viewv){
pd.show();
h.postDelayed(r,5000);
}
protectedvoidonDestroy(){
h.removeCallbacks(r);
if(pd.isShowing()){
pd.dismiss();
}
super.onDestroy();
}
privateclassTransparentProgressDialogextendsDialog{
super(context,R.style.TransparentProgressDialog);
WindowManager.LayoutParamswlmp=getWindow().getAttributes();
wlmp.gravity=Gravity.CENTER_HORIZONTAL;
getWindow().setAttributes(wlmp);
setTitle(null);
setCancelable(false);
setOnCancelListener(null);
LinearLayoutlayout=newLinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParamsparams=newLinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
iv=newImageView(context);
iv.setImageResource(resourceIdOfImage);
layout.addView(iv,params);
addContentView(layout,params);
}
publicvoidshow(){
super.show();
RotateAnimationanim=newRotateAnimation(0.0f,360.0f,Animation.RELATIVE_TO_SELF,.5f,Animation.RELATIVE_TO_SELF,.5f);
anim.setInterpolator(newLinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(3000);
iv.setAnimation(anim);
iv.startAnimation(anim);
}
}相关文章