diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 53bc04f..6a8237b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,6 +14,9 @@ android:supportsRtl="true" android:theme="@style/Theme.MusicApp" tools:targetApi="31"> + @@ -21,7 +24,7 @@ android:name=".ui.activity.MainActivity" 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/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 index 87ff526..0b975e5 100644 --- 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 @@ -5,7 +5,7 @@ import android.os.CountDownTimer; import com.hi.music.player.databinding.ActivityAsplashBinding; -public class AsplashActivity extends BaseActivity { +public class ASplashActivity extends BaseActivity { private static final int SPLASH_TIME_OUT = 1500; private CountDownTimer countDownTimer; @@ -48,7 +48,7 @@ public class AsplashActivity extends BaseActivity { @Override public void onFinish() { vb.progressBar.setProgress(100); - Intent intent = new Intent(AsplashActivity.this, HomeActivity.class); + Intent intent = new Intent(ASplashActivity.this, AHomeActivity.class); startActivity(intent); finish(); } 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..bdc0001 --- /dev/null +++ b/app/src/main/java/com/hi/music/player/ui/fragmnt/AHomeFragment.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 AHomeFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class AHomeFragment 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 AHomeFragment() { + // 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 AHomeFragment. + */ + // TODO: Rename and change types and number of parameters + public static AHomeFragment newInstance(String param1, String param2) { + AHomeFragment fragment = new AHomeFragment(); + 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_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/layout/activity_ahome.xml b/app/src/main/res/layout/activity_ahome.xml new file mode 100644 index 0000000..5a9d5eb --- /dev/null +++ b/app/src/main/res/layout/activity_ahome.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 index f6aeb60..8649154 100644 --- a/app/src/main/res/layout/activity_asplash.xml +++ b/app/src/main/res/layout/activity_asplash.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/black" - tools:context=".ui.activity.AsplashActivity"> + tools:context=".ui.activity.ASplashActivity"> + + + + + + \ 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