Nice Dialog Loading Animation

Keywords: Android network xml Java

From: http://blog.csdn.net/u014727709/article/details/54584894


When developing, in order to make the user experience better, there will be a start welcome page when app starts. After entering app, the user browses the page, first makes the network request, then the server responds to the data, and finally displays it on the page, the user can see the rich page. Then the problem comes. User's network has 2G, 3G and 4G. Now it's generally 4G. But user's network is different. In some places, the network is good, some are slow. When loading network data, the network will show a blank when it is too slow. This gives users a very bad experience, so it's in this section. Content, load network data and show a Loading animation to the user when the data returns, of course. Android Yes, here we customize a Load animation.  
First let's take a look at the rendering.

Let's take a look at the code section, starting with a custom Sys Loading. Java 
public class SysLoading extends LinearLayout{

private View view;
//Custom Animation
private AnimationDrawable mAnimation;
//Load Failure View
private RelativeLayout sys_loading_dialog_fail;
//Pictures in Load
private ImageView sys_loading_dialog_img;
//Loading Chinese Text
private TextView sys_loading_dialog_tv;
//Loading failed text
private TextView sys_loading_dialog_fail_tv;
//Load-time text
private String loadingText;

public SysLoading(Context context) {
    super(context);
}

public SysLoading(Context context, AttributeSet attrs) {
    super(context, attrs);
    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = layoutInflater.inflate(R.layout.sys_loading_dialog, this);
    //Load Failure View
    sys_loading_dialog_fail = (RelativeLayout) view.findViewById(R.id.sys_loading_dialog_fail);
    //Load-time picture
    sys_loading_dialog_img = (ImageView) view.findViewById(R.id.sys_loading_dialog_img);
    //Load-time text
    sys_loading_dialog_tv = (TextView) view.findViewById(R.id.sys_loading_dialog_tv);
    sys_loading_dialog_fail_tv = (TextView) view.findViewById(R.id.sys_loading_dialog_fail_tv);
}

public void showAnim(String loadingText){
    this.loadingText = loadingText;
    //Setting up animation effects
    initData();
}


public void stopAnim(){
    mAnimation.stop();
}






public void initData() {
    //Setting text
    sys_loading_dialog_tv.setText(loadingText);
    //Setting Display
    view.setVisibility(View.VISIBLE);
    //Set up image display when loading
    sys_loading_dialog_img.setVisibility(View.VISIBLE);
    //Set the text display at load time
    sys_loading_dialog_tv.setVisibility(View.VISIBLE);
    //Setting Failure View Hiding
    sys_loading_dialog_fail.setVisibility(View.GONE);
    //Get animation
    sys_loading_dialog_img.setBackgroundResource(R.drawable.sys_loading);
    //Get Animation Drawable through ImageView
    mAnimation = (AnimationDrawable) sys_loading_dialog_img.getBackground();
    //To prevent display of only the first frame
    sys_loading_dialog_img.post(new Runnable() {
        @Override
        public void run() {
            mAnimation.start();
        }
    });
}

//Method of Loading Failed Call
public void fialLoad(String failStr, View.OnClickListener listener){
    //Stop animation
    if(null != mAnimation && mAnimation.isRunning()){
        mAnimation.stop();
    }
    //Failure View Display
    sys_loading_dialog_fail.setVisibility(View.VISIBLE);
    //Setting up Failure Event Monitor
    sys_loading_dialog_fail.setOnClickListener(listener);
    //Setting Failed Text
    sys_loading_dialog_fail_tv.setText(failStr);
    //Set Picture Hiding When Loading
    sys_loading_dialog_img.setVisibility(View.GONE);
    //Setting Text Hiding at Load Time
    sys_loading_dialog_tv.setVisibility(View.GONE);
}


Then the sys_load.xml layout file
< ?xml version="1.0" encoding="utf-8"?> 
< 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:layout_marginBottom="30dp" 
android:gravity="center" > 
<! - View Pictures in Loading >
< ImageView 
android:id="@+id/sys_loading_dialog_img" 
android:layout_centerHorizontal="true" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:contentDescription="@null"/> 
<! - View Text in Loading >
< TextView 
android:id="@+id/sys_loading_dialog_tv" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:textStyle="normal" 
android:layout_marginTop="15dp" 
android:textSize="14sp" 
android:textColor="@color/black2" 
android:layout_below="@id/sys_loading_dialog_img" 
android:gravity="center"/> 
<! - Load Failure Layout View >
< RelativeLayout 
android:id="@+id/sys_loading_dialog_fail" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:gravity="center" 
android:visibility="gone"> 
<! - Load Failure Picture - >
< ImageView 
android:id="@+id/sys_loading_dialog_fail_img" 
android:layout_centerHorizontal="true" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:src="@drawable/sys_loading_dialog_fail" 
android:contentDescription="@null"/> 
<! - Loading Failed Text - >
< TextView 
android:id="@+id/sys_loading_dialog_fail_tv" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_below="@id/sys_loading_dialog_fail_img" 
android:layout_marginTop="15dp" 
android:textSize="14sp" 
android:textColor="@color/black2" 
android:gravity="center"/> 
< /RelativeLayout> 
< /RelativeLayout>

Finally, the drawable file is not posted, and the main usage code is given directly here.
public class MainActivity extends Activity { 
private Button btnLoading; 
// Custom Load Box
private SysLoading sysLoading; 
private boolean flag = true; 
private Handler handler = new Handler() { 
public void handleMessage(Message msg) { 
switch (msg.what) { 
case 100: 
Toast.makeText(MainActivity.this, "Load Successfully", Toast.LENGTH_SHORT).show();
// Hidden Load Box
sysLoading.setVisibility(View.GONE); 
break;

        default:
            break;
        }
    };
};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btnLoading = (Button) findViewById(R.id.btn_loading);

    //Get the load view
    sysLoading = (SysLoading) findViewById(R.id.sysLoading);
    Message msg = handler.obtainMessage();
    msg.what = 100;
    sysLoading.showAnim("Loading...");
    handler.sendMessageDelayed(msg, 2000);
}
public void Loading(View view) {
    sysLoading.initData();
    //Load failure
    sysLoading.fialLoad("Load failure...", new OnClickListener() {
        @Override
        public void onClick(View v) {
            Message msg = handler.obtainMessage();
            msg.what = 100;
            sysLoading.showAnim("Loading...");
            handler.sendMessageDelayed(msg, 2000);
            }
    });
}


Here is the download address of demo: http://download.csdn.net/detail/u014727709/9739898 
Reproduced from: http://blog.csdn.net/u014727709/article/details/54584894 
Welcome to start, comments and corrections.

Posted by HaZaRd420 on Thu, 27 Jun 2019 18:52:22 -0700