LoadingView在指定布局中心显示loading

这篇博客介绍了如何参照BadgeView的实现方式,创建一个LoadingView,使其能够在指定的布局中心显示加载指示器。作者提供了LoadingView.java的源代码,并提到了loading_drawable.xml作为加载动画的资源文件,读者可以自由替换该XML中的图片来定制自己的加载效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考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);
	}
}


loading_view.xml
<?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>


图片可自行替换



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值