转载: http://www.androidchina.net/2297.html
1.首先定义动画
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="360" android:drawable="@drawable/progess" > </rotate>
2.在布局文件中引入
<ProgressBar android:layout_centerInParent="true" android:id="@+id/pb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawable="@anim/progress_rotate" android:indeterminateDuration="500" />
但无法达到在项目中使用的便捷性,不可能每一个需要用到此Dialog的地方都需要在相应的xml文件中定义该ProgressBar的控件吧,如果开发中界面使用多层次的FrameLayout和多层次的布局,这就是个麻烦问题了。
下文将改 ProgressBar 单独定义为一个xml,并通过定义单独方法动态将其加入布局中。
1.定义布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/ll_pb" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/progess" /> </LinearLayout>
2.定义旋转动画
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <rotate android:duration="1500" android:fromDegrees="0" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:repeatCount="-1" android:repeatMode="restart" android:startOffset="-1" android:toDegrees="+360" /> </set>
3.定义样式
<!-- 自定义loading dialog --> <style name="loading_dialog" parent="android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
4.创建自定义Dialog
/** * 创建自定义ProgressDialog */ public static Dialog showProgress(Context context){ View view = View.inflate(context,R.layout.progress_diaolog,null); LinearLayout ll = (LinearLayout)view.findViewById(R.id.ll_pb); ImageView iv = (ImageView)view.findViewById(R.id.iv); Dialog d = new Dialog(context,R.style.loading_dialog); d.setContentView(ll,new LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); d.setCancelable(false); //设置动画 Animation a = AnimationUtils.loadAnimation(context,R.anim.progress_rotate); iv.startAnimation(a); return d; }
5.在文件中使用
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //显示 final Dialog dialog = Utils.showProgress(this); dialog.show(); //模拟联网操作 new Thread(){ public void run() { SystemClock.sleep(5000); dialog.dismiss(); }; }.start(); } }
显示5秒后自动消失
时间: 2024-12-10 00:42:44