<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/progress_hud_bg"
android:gravity="center_horizontal"
android:orientation="vertical"
android:paddingBottom="20dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="20dp" >
<ImageView
android:id="@+id/spinnerImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@anim/spinner" />
<TextView
android:id="@+id/message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="Message"
android:textColor="#FFFFFF" />
</LinearLayout></span><span style="font-size:14px;"><animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false" >
<item
android:drawable="@drawable/spinner_0"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_1"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_2"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_3"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_4"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_5"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_6"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_7"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_8"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_9"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_10"
android:duration="60"/>
<item
android:drawable="@drawable/spinner_11"
android:duration="60"/>
</animation-list></span> 这里提一下安卓的动画。android支持3种动画模式,tween animation,frame animation和property
animation,这三种动画模式在SDK中被称为view animation,drawable animation和property animation。<span style="font-size:14px;"><span style="font-size:18px;"> </span><span style="font-size:14px;">public ProgressHUD(Context context) {
super(context);
}
public ProgressHUD(Context context, int theme) {
super(context, theme);
}</span></span> int
theme:设置progressHUD的style,一会儿讲。<span style="font-size:14px;"> public void onWindowFocusChanged(boolean hasFocus){
ImageView imageView = (ImageView) findViewById(R.id.spinnerImageView);
<span style="white-space:pre"> </span>AnimationDrawable spinner = (AnimationDrawable) imageView.getBackground();
<span style="white-space:pre"> </span>spinner.start();
</span>
onWindowFocusChanged()方法是在和拥护交互时调用的,activity获取到焦点或者失去焦点时都会调用,它在activity的生命周期中是这样的:<span style="font-size:14px;"> public void setMessage(CharSequence message) {
if(message != null && message.length() > 0) {
findViewById(R.id.message).setVisibility(View.VISIBLE);
TextView txt = (TextView)findViewById(R.id.message);
txt.setText(message);
txt.invalidate();
}
</span>invalidate()方法的作用时请求重绘view树。事实上,在setVisibility()由可见变为不可见或者由不可见变为可见状态时,会自动调用invalidate()方法,我也不知道为什么此处又调用一次,我试了一下注释掉这行代码,也完全可以正常运行。<span style="font-size:14px;"> public static ProgressHUD show(Context context, CharSequence message, boolean indeterminate, boolean cancelable,
OnCancelListener cancelListener) {
ProgressHUD dialog = new ProgressHUD(context,R.style.ProgressHUD);
dialog.setTitle("");
dialog.setContentView(R.layout.progress_hud);
if(message == null || message.length() == 0) {
dialog.findViewById(R.id.message).setVisibility(View.GONE);
} else {
TextView txt = (TextView)dialog.findViewById(R.id.message);
txt.setText(message);
}
dialog.setCancelable(cancelable);
dialog.setOnCancelListener(cancelListener);
dialog.getWindow().getAttributes().gravity=Gravity.CENTER;//设置dialog显示在屏幕中央
WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
lp.dimAmount=0.2f; //设置控件的黑暗度,值为0-1。0.0f完全不暗,1.0f完全黑暗。也可以设置控件的透明度,如:<span style="color: rgb(73, 73, 73); font-family: simsun; font-size: 16px; line-height: 24px; background-color: rgb(230, 232, 231);">lp.alpha=1.0f;</span>
dialog.getWindow().setAttributes(lp);
//dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
dialog.show();
return dialog;
} </span>ProgressHUD类已完毕,我们再说一下R.style.ProgressHUD。<span style="font-size:14px;"> </style>
<style name="ProgressHUD" parent="@android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
</style>
</span>大致说一下。windowFrame:Dialog的windowFrame框为无活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:
1> 软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。
2> 活动的主窗口调整——否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。
<span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
private Context context;
public ProgressHUD mProgressHUD;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
}
public void loadDataStyle1(View view){
showMyDialog(true);
}
public void showMyDialog( boolean isCancelable) {
mProgressHUD = ProgressHUD.show(context, "加载中", true, isCancelable, null);}
</span>activity_main.xm:<span style="font-size:14px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.loaddatastyle.MainActivity" >
<Button
android:id="@+id/style1Btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_marginTop="45dp"
android:onClick="loadDataStyle1"
android:text="点击按钮,开始加载数据" />
</RelativeLayout></span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u010127250/article/details/47776789