参考BadgeView(https://github.com/jgilfelt/android-viewbadger)实现
LoadingView.java
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
/**
* <pre>
* 在指定布局的中心显示loading
* 示例:
* LoadingView loadingView = new LoadingView(this, findViewById(R.id.content_layout));
* loadingView.show();
* loadingView.hide();
* <pre>
* @author ligl01
*
*/
public class LoadingView extends FrameLayout {
private View mTarget = null;
private AnimationDrawable loadingDrawable = null;
private TextView tv_text = null;
private ImageView imgView = null;
public LoadingView(Context context, View target) {
super(context);
mTarget = target;
inflate(context, R.layout.loading_view, this);
imgView = (ImageView) findViewById(R.id.loading_img);
loadingDrawable = (AnimationDrawable) imgView.getDrawable();
tv_text = (TextView) findViewById(R.id.loading_text);
setVisibility(View.GONE);
ViewGroup.LayoutParams lp = mTarget.getLayoutParams();
ViewParent parent = mTarget.getParent();
FrameLayout container = new FrameLayout(context);
ViewGroup group = (ViewGroup) parent;
int index = group.indexOfChild(mTarget);
group.removeView(mTarget);
group.addView(container, index, lp);
container.addView(mTarget);
container.addView(this);
group.invalidate();
}
public void setText(CharSequence text) {
tv_text.setText(text);
}
public void show() {
setVisibility(View.VISIBLE);
loadingDrawable.start();
}
public void hide() {
setVisibility(View.GONE);
loadingDrawable.stop();
}
public boolean isShown() {
return getVisibility() == View.VISIBLE;
}
private View.OnClickListener interceptListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// do nothing
}
};
/**
* 设置loading显示时是否拦截点击事件<br/>
* @param flag true:拦截
*/
public void interceptClick(boolean flag) {
setOnClickListener(flag ? interceptListener : null);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_centerInParent="true"
android:background="@drawable/toast_frame"
android:padding="10dp" >
<ImageView
android:id="@+id/loading_img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/app_name"
android:src="@drawable/loading_drawable" >
</ImageView>
<TextView
android:id="@+id/loading_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#fff"
/>
</LinearLayout>
</RelativeLayout>
loading_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/common_loading4_0"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_1"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_2"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_3"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_4"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_5"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_6"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_7"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_8"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_9"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_10"
android:duration="100"/>
<item
android:drawable="@drawable/common_loading4_11"
android:duration="100"/>
</animation-list>
图片可自行替换