diff --git a/app/src/main/java/com/example/oxfacelogin/MainActivity.java b/app/src/main/java/com/example/oxfacelogin/MainActivity.java index 7e93838..1356a06 100644 --- a/app/src/main/java/com/example/oxfacelogin/MainActivity.java +++ b/app/src/main/java/com/example/oxfacelogin/MainActivity.java @@ -1,7 +1,9 @@ package com.example.oxfacelogin; import androidx.appcompat.app.AppCompatActivity; +import android.animation.ObjectAnimator; import android.os.Bundle; +import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.EditText; @@ -12,17 +14,26 @@ public class MainActivity extends AppCompatActivity { private EditText editTextUsername; private EditText editTextPassword; private Button buttonLogin; + private Toast currentToast; // 用于管理Toast显示状态 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + // 隐藏ActionBar以获得全屏效果 + if (getSupportActionBar() != null) { + getSupportActionBar().hide(); + } + // 初始化视图组件 initViews(); // 设置登录按钮点击事件 setupLoginButton(); + + // 设置按钮触摸动画 + setupButtonAnimation(); } private void initViews() { @@ -44,22 +55,52 @@ public class MainActivity extends AppCompatActivity { } }); } + + private void setupButtonAnimation() { + buttonLogin.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + // 按下时缩小 + ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(v, "scaleX", 0.95f); + ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(v, "scaleY", 0.95f); + scaleDownX.setDuration(100); + scaleDownY.setDuration(100); + scaleDownX.start(); + scaleDownY.start(); + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + // 释放时恢复 + ObjectAnimator scaleUpX = ObjectAnimator.ofFloat(v, "scaleX", 1.0f); + ObjectAnimator scaleUpY = ObjectAnimator.ofFloat(v, "scaleY", 1.0f); + scaleUpX.setDuration(100); + scaleUpY.setDuration(100); + scaleUpX.start(); + scaleUpY.start(); + break; + } + return false; // 返回false以确保onClick事件仍然被触发 + } + }); + } private boolean validateInput(String username, String password) { if (username.isEmpty()) { - editTextUsername.setError("请输入用户名"); + showToast("请输入用户名"); editTextUsername.requestFocus(); return false; } if (password.isEmpty()) { - editTextPassword.setError("请输入密码"); + showToast("请输入密码"); editTextPassword.requestFocus(); return false; } if (password.length() < 6) { - editTextPassword.setError("密码长度至少6位"); + showToast("密码长度至少6位"); editTextPassword.requestFocus(); return false; } @@ -71,9 +112,24 @@ public class MainActivity extends AppCompatActivity { // 这里可以添加实际的登录逻辑 // 目前只是显示一个简单的提示 if (username.equals("admin") && password.equals("123456")) { - Toast.makeText(this, "登录成功!欢迎 " + username, Toast.LENGTH_SHORT).show(); + showToast("登录成功!欢迎 " + username); } else { - Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show(); + showToast("用户名或密码错误"); } } + + /** + * 显示Toast消息,确保只显示最新的消息 + * @param message 要显示的消息 + */ + private void showToast(String message) { + // 如果之前有Toast正在显示,先取消它 + if (currentToast != null) { + currentToast.cancel(); + } + + // 创建新的Toast并显示 + currentToast = Toast.makeText(this, message, Toast.LENGTH_SHORT); + currentToast.show(); + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient_background.xml b/app/src/main/res/drawable/gradient_background.xml new file mode 100644 index 0000000..88464cf --- /dev/null +++ b/app/src/main/res/drawable/gradient_background.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient_button.xml b/app/src/main/res/drawable/gradient_button.xml new file mode 100644 index 0000000..6a57c8c --- /dev/null +++ b/app/src/main/res/drawable/gradient_button.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient_button_selector.xml b/app/src/main/res/drawable/gradient_button_selector.xml new file mode 100644 index 0000000..88cede7 --- /dev/null +++ b/app/src/main/res/drawable/gradient_button_selector.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6747ecd..4cb7931 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,150 +4,215 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/background_color" + android:background="@drawable/gradient_background" android:fillViewport="true"> - - + + app:layout_constraintTop_toTopOf="parent"> - - + + + + + + app:layout_constraintTop_toBottomOf="@+id/logoContainer"> + + + + + + - + + + + + + app:layout_constraintTop_toBottomOf="@+id/usernameCard"> + android:layout_height="50dp" + android:orientation="horizontal" + android:gravity="center_vertical" + android:paddingStart="16dp" + android:paddingEnd="16dp"> - - - - - - - - - - - + + - - - - - - - - - - + android:inputType="textPassword" + android:maxLines="1" + android:background="@android:color/transparent" + android:textColor="@color/primary_text_color" + android:textColorHint="@color/secondary_text_color" + android:textSize="16sp" /> + + + + + + +