使用Android开源组件DialogX、自定义加载动画的demo
- 展示
- 图片
- 部分代码(java)
- Gitee地址
展示
图片
部分代码(java)
LoginActivity:
package com.lxz.myapp.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.material.textfield.TextInputEditText;
import com.lxz.myapp.MainActivity;
import com.lxz.myapp.R;
import com.lxz.myapp.databinding.ActivityLoginBinding;
import com.lxz.myapp.utils.AnimationUtil;
import com.lxz.myapp.utils.DialogXUtil;
import com.lxz.myapp.utils.StringUtil;
public class LoginActivity extends BaseActivity {
private ActivityLoginBinding binding;
private float mWidth, mHeight;
private TextInputEditText etAccount,etPassword;
private LinearLayout mAccount,mPassword;
private TextView loginToRegister;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityLoginBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
mAccount = findViewById(R.id.login_input_layout_account);
mPassword = findViewById(R.id.login_input_layout_psw);
etAccount = findViewById(R.id.login_account_et);
etPassword = findViewById(R.id.login_password_et);
// 计算出控件的高与宽
mWidth = binding.loginLoginButton.getMeasuredWidth();
mHeight = binding.loginLoginButton.getMeasuredHeight();
initView();
}
private void initView() {
clickLoginToRegister();
clickLogin();
clickCancel();
}
//点击登录界面的注册
private void clickLoginToRegister(){
//点击登录界面的注册
loginToRegister = findViewById(R.id.login_title_to_register);
loginToRegister.setOnClickListener(v -> {
Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(intent);
});
}
//点击登录
private void clickLogin(){
binding.loginLoginButton.setOnClickListener(v -> {
//启动动画
startAnimation();
//逻辑登录
loginLogic();
});
}
//登录逻辑
private void loginLogic(){
//获取输入框的账号密码
String account = etAccount.getText().toString().trim();
String password = etPassword.getText().toString().trim();
//输入判断有空
if(StringUtil.isTwoExistEmpty(account,password)){
//弹出DialogX对话框
DialogXUtil.messageTipDialogX(getString(R.string.notice), getString(R.string.noAccountOrPassword), getString(R.string.confirm), this::stopAnimation);
}
}
//点击取消
private void clickCancel(){
binding.loginCancelButton.setOnClickListener(v ->{
//转到初始界面
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
startActivity(intent);
});
}
//启动动画
private void startAnimation(){
// 隐藏输入框
mAccount.setVisibility(View.INVISIBLE);
mPassword.setVisibility(View.INVISIBLE);
AnimationUtil.inputAnimator(binding.loginInputLayout.getRoot(),mWidth,mHeight, binding.loginInputLayout.getRoot(), binding.layoutProgress.getRoot());
}
//停止动画
protected void stopAnimation(){
// 显示输入框
mAccount.setVisibility(View.VISIBLE);
mPassword.setVisibility(View.VISIBLE);
AnimationUtil.recovery(binding.layoutProgress.getRoot(), binding.loginInputLayout.getRoot(),mAccount,mPassword);
}
}
BaseActivity:
package com.lxz.myapp.activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.lxz.myapp.R;
public class BaseActivity extends AppCompatActivity {
public Context mContext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
}
//封装一个Toast提示
public void showToast(String msg){
Toast.makeText(mContext,msg,Toast.LENGTH_SHORT).show();
}
//封装一个AlertDialog
public void showAlertDialog(String title, String msg, String NBtn,DialogInterface.OnDismissListener dismissListener){
AlertDialog.Builder builder = mContext != null ? new AlertDialog.Builder(mContext) : null;
if (builder != null) {
builder.setTitle(title);
builder.setMessage(msg);
builder.setNegativeButton(NBtn, (dialog, which) -> {
// 点击确定按钮后的操作
dialog.dismiss(); // 关闭对话框
});
// 设置对话框关闭监听器
builder.setOnDismissListener(dismissListener);
AlertDialog dialog = builder.create();
if (dialog != null) {
dialog.show();
}
}
}
}
RegisterActivity:
package com.lxz.myapp.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.events.EventHandler;
import com.lxz.myapp.MainActivity;
import com.lxz.myapp.R;
import com.lxz.myapp.databinding.ActivityRegisterBinding;
import com.lxz.myapp.utils.AnimationUtil;
import com.lxz.myapp.utils.DialogXUtil;
import com.lxz.myapp.utils.StringUtil;
import java.util.Timer;
public class RegisterActivity extends BaseActivity {
private ActivityRegisterBinding binding;
private float mWidth, mHeight;
private TextInputEditText etAccount,etPassword;
private LinearLayout mAccount,mPassword;
public EventHandler eh; //事件接收器
private Timer mTimeCount;//计时器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityRegisterBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
mAccount = findViewById(R.id.register_input_layout_account);
mPassword = findViewById(R.id.register_input_layout_psw);
etAccount = findViewById(R.id.register_account_et);
etPassword = findViewById(R.id.register_password_et);
// 计算出控件的高与宽
mWidth = binding.registerRegisterButton.getMeasuredWidth();
mHeight = binding.registerRegisterButton.getMeasuredHeight();
initView();
}
private void initView() {
//点击注册
clickRegister();
//点击取消
clickCancelOFRegister();
}
//点击注册
private void clickRegister(){
binding.registerRegisterButton.setOnClickListener(v -> {
startAnimation();
//逻辑注册
registerLogic();
});
}
//注册逻辑
private void registerLogic() {
//获取输入框的账号密码
String account = etAccount.getText().toString().trim();
String password = etPassword.getText().toString().trim();
//输入判断有空
if(StringUtil.isTwoExistEmpty(account,password)){
//弹出DialogX对话框
DialogXUtil.messageTipDialogX(getString(R.string.notice),
getString(R.string.noAccountOrPassword),
getString(R.string.confirm),
this::stopAnimation
);
}
}
//点击取消
private void clickCancelOFRegister(){
binding.registerCancelButton.setOnClickListener(v ->{
//转到初始界面
Intent intent = new Intent(RegisterActivity.this, MainActivity.class);
startActivity(intent);
});
}
//启动加载动画
private void startAnimation(){
// 隐藏输入框
mAccount.setVisibility(View.INVISIBLE);
mPassword.setVisibility(View.INVISIBLE);
AnimationUtil.inputAnimator(binding.registerInputLayout.getRoot(), mWidth, mHeight, binding.registerInputLayout.getRoot(), binding.layoutProgress.getRoot());
}
//停止加载动画
private void stopAnimation(){
// 显示输入框
mAccount.setVisibility(View.VISIBLE);
mPassword.setVisibility(View.VISIBLE);
AnimationUtil.recovery(binding.layoutProgress.getRoot(), binding.registerInputLayout.getRoot(),mAccount,mPassword);
}
}
工具类DialogXUtil:
package com.lxz.myapp.utils;
import android.widget.Button;
import com.kongzue.dialogx.DialogX;
import com.kongzue.dialogx.dialogs.InputDialog;
import com.kongzue.dialogx.dialogs.MessageDialog;
import com.kongzue.dialogx.dialogs.PopTip;
import com.kongzue.dialogx.dialogs.TipDialog;
import com.kongzue.dialogx.dialogs.WaitDialog;
import com.kongzue.dialogx.style.IOSStyle;
import com.kongzue.dialogx.style.MaterialStyle;
public class DialogXUtil {
//消息提示框,标题、内容、确定按钮
public static void messageTipDialogX(String title, String message, String okText, Runnable callback) {
DialogX.globalStyle = IOSStyle.style();
MessageDialog.show(title, message, okText)
.setOkButton((baseDialog, v) -> {
if (callback != null) {
callback.run();
}
return false;
});
}
//输入框
public static void inputDialogX(Button btnInputDialog){
DialogX.globalStyle = MaterialStyle.style();
btnInputDialog.setOnClickListener(view -> new InputDialog("标题", "正文内容", "确定", "取消", "正在输入的文字")
.setInputText("Hello World")
.setOkButton((baseDialog, v, inputStr) -> {
PopTip.show("输入的内容:" + inputStr);
return false;
})
.show());
}
//弹出成功提示框
public static void tipSuccessDialogX(String msg){
//正确
TipDialog.show(msg, WaitDialog.TYPE.SUCCESS);
}
//弹出失败提示框
public static void tipErrorDialogX(String msg){
//错误
TipDialog.show(msg, WaitDialog.TYPE.ERROR);
}
}