diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a33dc8d..f8fe189 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -19,10 +19,16 @@
android:name=".ui.activity.PlayActivity"
android:exported="false" />
+
+
diff --git a/app/src/main/java/com/hi/music/player/adapter/AHomeViewPagerAdapter.java b/app/src/main/java/com/hi/music/player/adapter/AHomeViewPagerAdapter.java
new file mode 100644
index 0000000..545473c
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/adapter/AHomeViewPagerAdapter.java
@@ -0,0 +1,33 @@
+package com.hi.music.player.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentActivity;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import com.hi.music.player.ui.fragmnt.AHomeFragment;
+import com.hi.music.player.ui.fragmnt.AImportFragment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class AHomeViewPagerAdapter extends FragmentStateAdapter {
+
+ private final List fragments = new ArrayList<>();
+ public AHomeViewPagerAdapter(@NonNull FragmentActivity fragmentActivity) {
+ super(fragmentActivity);
+ fragments.add(new AHomeFragment());
+ fragments.add(new AImportFragment());
+ }
+
+ @NonNull
+ @Override
+ public Fragment createFragment(int position) {
+ return fragments.get(position);
+ }
+
+ @Override
+ public int getItemCount() {
+ return fragments.size();
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/helper/CircularProgressBar.java b/app/src/main/java/com/hi/music/player/helper/CircularProgressBar.java
new file mode 100644
index 0000000..e824383
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/helper/CircularProgressBar.java
@@ -0,0 +1,102 @@
+package com.hi.music.player.helper;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.view.View;
+
+public class CircularProgressBar extends View {
+ private Paint progressPaint;
+ private Paint backgroundPaint;
+ private float progress = 0;
+ private float maxProgress = 100;
+
+ private int fixedSize = 47; // 固定圆环的直径(dp)
+ private int progressWidth = 5; // 固定进度条宽度(dp)
+
+ public CircularProgressBar(Context context) {
+ super(context);
+ init();
+ }
+
+ public CircularProgressBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public CircularProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ private void init() {
+ // 初始化用于绘制进度条的画笔
+ progressPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ progressPaint.setStyle(Paint.Style.STROKE);
+ progressPaint.setStrokeWidth(dpToPx(progressWidth)); // 设置进度条宽度(10dp)
+ progressPaint.setColor(Color.WHITE); // 设置进度条颜色为白色
+
+ // 初始化用于绘制背景环的画笔
+ backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ backgroundPaint.setStyle(Paint.Style.STROKE);
+ backgroundPaint.setStrokeWidth(dpToPx(progressWidth));
+ backgroundPaint.setColor(Color.GRAY); // 设置背景环颜色为灰色
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ // Convert dp to pixels
+ int diameterPx = dpToPx(fixedSize);
+ int size = diameterPx + dpToPx(progressWidth) * 2;
+ setMeasuredDimension(size, size);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+
+ // 获取视图中心坐标
+ float centerX = getWidth() / 2f;
+ float centerY = getHeight() / 2f;
+
+ // 固定圆环的半径
+ float radius = (Math.min(getWidth(), getHeight()) - dpToPx(progressWidth)) / 2f;
+
+ // 绘制背景环
+ canvas.drawCircle(centerX, centerY, radius, backgroundPaint);
+
+ // 计算进度条的起始角度和扫过的角度
+ float startAngle = -90f; // 从顶部开始
+ float sweepAngle = 360f * progress / maxProgress; // 根据进度计算扫过的角度
+ // 绘制进度条
+ canvas.drawArc(
+ centerX - radius, // 左上角 X 坐标
+ centerY - radius, // 左上角 Y 坐标
+ centerX + radius, // 右下角 X 坐标
+ centerY + radius, // 右下角 Y 坐标
+ startAngle, // 起始角度
+ sweepAngle, // 扫过的角度
+ false, // 是否使用扇形
+ progressPaint // 使用的画笔
+ );
+ }
+
+ public void setProgress(float progress) {
+ this.progress = Math.max(0, Math.min(progress, maxProgress)); // 限制进度值在 0 到 maxProgress 之间
+ invalidate(); // 请求重新绘制视图
+ }
+
+ public void setMaxProgress(float maxProgress) {
+ this.maxProgress = maxProgress;
+ this.progress = Math.max(0, Math.min(this.progress, maxProgress)); // 调整当前进度值以适应新的最大值
+ invalidate(); // 请求重新绘制视图
+ }
+
+ // 将 dp 转换为 px
+ private int dpToPx(int dp) {
+ float density = getResources().getDisplayMetrics().density;
+ return Math.round(dp * density); // 将 dp 值乘以屏幕密度转换为 px
+ }
+}
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/AHomeActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/AHomeActivity.java
new file mode 100644
index 0000000..375bedc
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/ui/activity/AHomeActivity.java
@@ -0,0 +1,99 @@
+package com.hi.music.player.ui.activity;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+
+import com.google.android.material.tabs.TabLayout;
+import com.google.android.material.tabs.TabLayoutMediator;
+import com.hi.music.player.R;
+import com.hi.music.player.adapter.AHomeViewPagerAdapter;
+import com.hi.music.player.databinding.ActivityAhomeBinding;
+import com.hi.music.player.databinding.HomeTabCustomBinding;
+
+public class AHomeActivity extends BaseActivity {
+
+ // 图标数组定义为类成员,避免重复
+ private final int[] defaultIcons = {
+ R.drawable.home_unselect,
+ R.drawable.import_unselect,
+ };
+
+ private final int[] selectedIcons = {
+ R.drawable.home_select,
+ R.drawable.import_select,
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ }
+
+ @Override
+ protected ActivityAhomeBinding getViewBinding() {
+ return ActivityAhomeBinding.inflate(getLayoutInflater());
+ }
+
+ @Override
+ protected void onCreateInit() {
+
+ initData();
+
+ }
+
+ @Override
+ public boolean isFullScreen() {
+ return true;
+ }
+
+ @Override
+ public boolean statusBarLight() {
+ return false;
+ }
+
+ public void initData(){
+
+ AHomeViewPagerAdapter adapter = new AHomeViewPagerAdapter(this);
+ vb.homeViewpager.setAdapter(adapter);
+
+ // 设置TabLayout的图标
+ new TabLayoutMediator(vb.homeTabLayout, vb.homeViewpager, (tab, position) -> {
+ HomeTabCustomBinding tabBinding = HomeTabCustomBinding.inflate(LayoutInflater.from(this));
+ tab.setCustomView(tabBinding.getRoot());
+ tabBinding.homeIcon.setImageResource(defaultIcons[position]); // 默认图标
+ }).attach();
+
+ // 添加Tab选中与未选中事件监听器
+ vb.homeTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+ @Override
+ public void onTabSelected(TabLayout.Tab tab) {
+ updateTabIcon(tab, true); // 更新选中的图标
+ }
+
+ @Override
+ public void onTabUnselected(TabLayout.Tab tab) {
+ updateTabIcon(tab, false); // 恢复未选中图标
+ }
+
+ @Override
+ public void onTabReselected(TabLayout.Tab tab) {
+ // 可选:重复选择Tab时的操作
+ }
+ });
+
+ // 设置默认选中第一个
+ TabLayout.Tab firstTab = vb.homeTabLayout.getTabAt(0);
+ if (firstTab != null) {
+ firstTab.select();
+ updateTabIcon(firstTab, true); // 设置选中的图标
+ }
+ }
+
+ private void updateTabIcon(TabLayout.Tab tab, boolean isSelected) {
+ HomeTabCustomBinding tabBinding = HomeTabCustomBinding.bind(tab.getCustomView());
+ int position = tab.getPosition();
+ tabBinding.homeIcon.setImageResource(isSelected ? selectedIcons[position] : defaultIcons[position]);
+ }
+
+ }
+
diff --git a/app/src/main/java/com/hi/music/player/ui/activity/AsplashActivity.java b/app/src/main/java/com/hi/music/player/ui/activity/AsplashActivity.java
new file mode 100644
index 0000000..0b975e5
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/ui/activity/AsplashActivity.java
@@ -0,0 +1,60 @@
+package com.hi.music.player.ui.activity;
+
+import android.content.Intent;
+import android.os.CountDownTimer;
+
+import com.hi.music.player.databinding.ActivityAsplashBinding;
+
+public class ASplashActivity extends BaseActivity {
+
+ private static final int SPLASH_TIME_OUT = 1500;
+ private CountDownTimer countDownTimer;
+
+ @Override
+ protected ActivityAsplashBinding getViewBinding() {
+ return ActivityAsplashBinding.inflate(getLayoutInflater());
+ }
+
+ @Override
+ protected void onCreateInit() {
+
+ intData();
+
+ }
+
+ @Override
+ public boolean isFullScreen() {
+ return true;
+ }
+
+ @Override
+ public boolean statusBarLight() {
+ return false;
+ }
+
+ public void intData(){
+
+ countDownTimer = new CountDownTimer(SPLASH_TIME_OUT, 100) {
+
+ @Override
+ public void onTick(long millisUntilFinished) {
+
+ float v = 100 - (float) millisUntilFinished / SPLASH_TIME_OUT * 100;
+ int v1 = (int) v;
+ vb.progressBar.setProgress(v1);
+
+ }
+
+ @Override
+ public void onFinish() {
+ vb.progressBar.setProgress(100);
+ Intent intent = new Intent(ASplashActivity.this, AHomeActivity.class);
+ startActivity(intent);
+ finish();
+ }
+ };
+
+ countDownTimer.start();
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/AHomeFragment.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/AHomeFragment.java
new file mode 100644
index 0000000..e0e502a
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/AHomeFragment.java
@@ -0,0 +1,24 @@
+package com.hi.music.player.ui.fragmnt;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.hi.music.player.R;
+
+
+public class AHomeFragment extends Fragment {
+
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_a_home, container, false);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/hi/music/player/ui/fragmnt/AImportFragment.java b/app/src/main/java/com/hi/music/player/ui/fragmnt/AImportFragment.java
new file mode 100644
index 0000000..a89cb02
--- /dev/null
+++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/AImportFragment.java
@@ -0,0 +1,66 @@
+package com.hi.music.player.ui.fragmnt;
+
+import android.os.Bundle;
+
+import androidx.fragment.app.Fragment;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.hi.music.player.R;
+
+/**
+ * A simple {@link Fragment} subclass.
+ * Use the {@link AImportFragment#newInstance} factory method to
+ * create an instance of this fragment.
+ */
+public class AImportFragment extends Fragment {
+
+ // TODO: Rename parameter arguments, choose names that match
+ // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ // TODO: Rename and change types of parameters
+ private String mParam1;
+ private String mParam2;
+
+ public AImportFragment() {
+ // Required empty public constructor
+ }
+
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment AImportFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ public static AImportFragment newInstance(String param1, String param2) {
+ AImportFragment fragment = new AImportFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_a_import, container, false);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/a_rounded_rectangle_tab_layout.xml b/app/src/main/res/drawable/a_rounded_rectangle_tab_layout.xml
new file mode 100644
index 0000000..dcc6e4f
--- /dev/null
+++ b/app/src/main/res/drawable/a_rounded_rectangle_tab_layout.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ -
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/circular_progress_drawable.xml b/app/src/main/res/drawable/circular_progress_drawable.xml
new file mode 100644
index 0000000..7ae0e50
--- /dev/null
+++ b/app/src/main/res/drawable/circular_progress_drawable.xml
@@ -0,0 +1,18 @@
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/clock.xml b/app/src/main/res/drawable/clock.xml
new file mode 100644
index 0000000..324cc10
--- /dev/null
+++ b/app/src/main/res/drawable/clock.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/import_select.xml b/app/src/main/res/drawable/import_select.xml
new file mode 100644
index 0000000..b546665
--- /dev/null
+++ b/app/src/main/res/drawable/import_select.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/import_unselect.xml b/app/src/main/res/drawable/import_unselect.xml
new file mode 100644
index 0000000..656e4e1
--- /dev/null
+++ b/app/src/main/res/drawable/import_unselect.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/pause.xml b/app/src/main/res/drawable/pause.xml
new file mode 100644
index 0000000..6ece7e6
--- /dev/null
+++ b/app/src/main/res/drawable/pause.xml
@@ -0,0 +1,18 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/seek_bar_color.xml b/app/src/main/res/drawable/seek_bar_color.xml
new file mode 100644
index 0000000..5af9536
--- /dev/null
+++ b/app/src/main/res/drawable/seek_bar_color.xml
@@ -0,0 +1,21 @@
+
+ -
+
+
+
+
+
+
+ -
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_ahome.xml b/app/src/main/res/layout/activity_ahome.xml
new file mode 100644
index 0000000..4f9ca99
--- /dev/null
+++ b/app/src/main/res/layout/activity_ahome.xml
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_asplash.xml b/app/src/main/res/layout/activity_asplash.xml
new file mode 100644
index 0000000..8649154
--- /dev/null
+++ b/app/src/main/res/layout/activity_asplash.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_a_home.xml b/app/src/main/res/layout/fragment_a_home.xml
new file mode 100644
index 0000000..bf668f8
--- /dev/null
+++ b/app/src/main/res/layout/fragment_a_home.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_a_import.xml b/app/src/main/res/layout/fragment_a_import.xml
new file mode 100644
index 0000000..c6ef680
--- /dev/null
+++ b/app/src/main/res/layout/fragment_a_import.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-xxxhdpi/cover.png b/app/src/main/res/mipmap-xxxhdpi/cover.png
new file mode 100644
index 0000000..a8fb290
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/cover.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/launch_icon.png b/app/src/main/res/mipmap-xxxhdpi/launch_icon.png
new file mode 100644
index 0000000..425ae9e
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/launch_icon.png differ
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 35c0625..453dbaa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -9,4 +9,6 @@
New Releases
Musicoo
Profile
+ Listen Music Anytime
+ Resource Loading...
\ No newline at end of file