zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android中创建一个透明的进度对话框实例

Android实例 一个 创建 透明 对话框 进度
2023-06-13 09:15:26 时间

首先我们看一下什么叫做透明的进度对话框:



接下来我们讲一下如何创建:
1、使用Eclipse创建一个新的Andr​​oid项目,使用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文件了

复制代码代码如下:
MainActivity.java
packagecom.authorwjf.transparentprogressdialog;

importandroid.os.Bundle;
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;

publicclassMainActivityextendsActivityimplementsOnClickListener{

 privateTransparentProgressDialogpd;
 privateHandlerh;
 privateRunnabler;

 @Override
 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);
 }

 @Override
 publicvoidonClick(Viewv){
  pd.show();
  h.postDelayed(r,5000);
 }

 @Override
 protectedvoidonDestroy(){
  h.removeCallbacks(r);
  if(pd.isShowing()){
   pd.dismiss();
  }
  super.onDestroy();
 }

}

6、以下是实现透明动画的代码

复制代码代码如下:
privateclassTransparentProgressDialogextendsDialog{

 privateImageViewiv;

 publicTransparentProgressDialog(Contextcontext,intresourceIdOfImage){
  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);
 }

 @Override
 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);
 }
}

最后的结果是