diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..159ebf1 --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..0897082 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..5eedab0 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,41 @@ +plugins { + alias(libs.plugins.android.application) +} + +android { + namespace = "com.example.goukumusic" + compileSdk = 34 + + defaultConfig { + applicationId = "com.example.goukumusic" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + buildToolsVersion = "34.0.0" +} + +dependencies { + + implementation(libs.appcompat) + implementation(libs.material) + implementation(libs.activity) + implementation(libs.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.ext.junit) + androidTestImplementation(libs.espresso.core) +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/goukumusic/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/goukumusic/ExampleInstrumentedTest.java new file mode 100644 index 0000000..276c6ee --- /dev/null +++ b/app/src/androidTest/java/com/example/goukumusic/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.example.goukumusic; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.example.goukumusic", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a7aa07e --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/ContentFragment.java b/app/src/main/java/com/example/goukumusic/ContentFragment.java new file mode 100644 index 0000000..033d4fb --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/ContentFragment.java @@ -0,0 +1,53 @@ +package com.example.goukumusic; + +import android.app.Activity; +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import org.w3c.dom.Text; + + +public class ContentFragment extends Fragment { + private View view; + private TextView text1,text2; + private ImageView imageView; +// public void onAttach(Activity activity){ +// super.onAttach(activity); +// } + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState){ + // 获取布局文件 + view = inflater.inflate(R.layout.fragment_content, container,false); + if (view != null){ + init(); + } + // 获取Activity中设置的文字 + setText(((FragmentList)getActivity()).getSettingText()[0]); + return view; + } + private void init(){ + text1 = (TextView) view.findViewById(R.id.show_title); + text2 = (TextView) view.findViewById(R.id.show_content); + imageView = (ImageView) view.findViewById(R.id.show_image); + } + public void setText(String[] text){ + text1.setText(text[0]); + text2.setText(text[1]); + } + // 设置图片方法 + public void setImage(int imageIndex){ + // 获取Activity中的图片资源数组 + int[] imageResources = ((FragmentList) getActivity()).getImageResources(); + // 检查图片索引是否有效 + if (imageIndex >= 0 && imageIndex < imageResources.length) { + // 根据图片索引设置图片资源 + imageView.setImageResource(imageResources[imageIndex]); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/ForgetPassword.java b/app/src/main/java/com/example/goukumusic/ForgetPassword.java new file mode 100644 index 0000000..cf5857e --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/ForgetPassword.java @@ -0,0 +1,55 @@ +package com.example.goukumusic; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class ForgetPassword extends AppCompatActivity { + + private EditText UserName,Password,Password_again; + private Button Btn_return; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_forget_password); + setTitle("狗酷音乐新用户注册"); + // 添加监控 + UserName = (EditText) findViewById(R.id.username); + Password = (EditText) findViewById(R.id.password); + Password = (EditText) findViewById(R.id.password_again); + Button btn_forget_pwd = (Button) findViewById(R.id.btn_forget_pwd); + Btn_return = (Button) findViewById(R.id.btn_return); + + // 设置注册按钮btn_register监听器 + btn_forget_pwd.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_register = new Intent(ForgetPassword.this, MainActivity.class); + Bundle bundle1 = new Bundle(); + bundle1.putString("usre_name", UserName.getText().toString()); + bundle1.putString("user_password", Password.getText().toString()); + bundle1.putString("user_password_again",Password_again.getText().toString()); + intent_register.putExtras(bundle1); //上传注册的参数 + startActivity(intent_register); + } + }); + + // 设置返回按钮btn_return监听器 + Btn_return.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_return = new Intent(ForgetPassword.this, MainActivity.class); + startActivity(intent_return); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/FragmentList.java b/app/src/main/java/com/example/goukumusic/FragmentList.java new file mode 100644 index 0000000..0922859 --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/FragmentList.java @@ -0,0 +1,79 @@ +package com.example.goukumusic; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; + +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +public class FragmentList extends FragmentActivity { + // 设置标题 + private final String[] title = {"科幻未来","玄幻小说","情感小说","励志感悟","人物传记"}; + private final String[][] settingText = { + {"三体"," 作品讲述了地球人类文明和三体文明的信息交流、生死搏杀及两个文明在宇宙中的兴衰历程。\n" + + " 《三体》的文本叙事在“后人类”的思考上有着重大突破,构建了科学与文学的互动范式,将道德内涵引入对科技的辩证思考中。"}, + {"斗破苍穹"," 这里是属于斗气的世界,没有花俏艳丽的魔法,有的,仅仅是繁衍到巅峰的斗气!想要知道异界的斗气在发展到巅峰之后是何种境地吗?\n" + + " 萧炎:三十年河东,三十年河西,莫欺少年穷!且看萧炎从今以后便一步步走向斗气大陆巅峰!"}, + {"我的26岁女房客"," 主角昭阳寻觅理想中的天空之城,而谁又是住在那座城池里的那个女子\n" + + " 这是一本贴近生活的写实书,不狗血非异能不玄幻,而是酸甜苦辣五味俱全的纯粹的都市、职场、现实生活。"}, + {"抓落叶"," 如果你也偶尔思考人生的意义,常把人间不值得挂在嘴边,深夜听着《曾经我也想过一了百了》默默流泪,那么请看看艾略特的故事。\n"}, + {"邓小平时代"," 《邓小平时代》,是对邓小平跌宕起伏的一生以及中国惊险崎岖的改革开放之路的全景式描述。\n" + + " 作者对邓小平个人性格及执政风格进行了深层分析,并对中国改革开放史进行了完整而独到的阐释。"} + }; + + private Button Btn_shouye; + + // 添加图片资源 + private final int[] imageResources = { + R.drawable.santi, + R.drawable.dpcq, + R.drawable.nfk, + R.drawable.zhualuoye, + R.drawable.dxp + }; + //获取标题数组的方法 + public String[] getTitles() { + return title; + } + + public String[][] getSettingText() { + return settingText; + } + public int[] getImageResources(){return imageResources;} + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_fragment_list); + Btn_shouye = findViewById(R.id.btn_shouye); + + Btn_shouye.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // 创建一个 Intent,将其指向 Fragment_audio 页面 + Intent intent = new Intent(FragmentList.this, LoginSuccess.class); + // 启动 Fragment_audio 活动页面 + startActivity(intent); + + // 关闭当前的 FragmentList 活动页面 + finish(); + } + }); + //创建标题和内容Fragment实例 + TitleFragment titleFragment=new TitleFragment(); + ContentFragment contentFragment=new ContentFragment(); + //获取事物 + FragmentManager fragmentManager= getSupportFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + //添加Fragment + transaction.replace(R.id.settitle,titleFragment); + transaction.replace(R.id.setcontent,contentFragment); + //提交事物 + transaction.commit(); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/Fragment_audio.java b/app/src/main/java/com/example/goukumusic/Fragment_audio.java new file mode 100644 index 0000000..26c259c --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/Fragment_audio.java @@ -0,0 +1,41 @@ +package com.example.goukumusic; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + +public class Fragment_audio extends Fragment { + Button Btn_shouye, Btn_fenlei; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // 创建 Fragment 布局 + View rootView = inflater.inflate(R.layout.audio, container, false); + + // 找到按钮控件 + Btn_fenlei = rootView.findViewById(R.id.btn_fenlei); + + // 设置按钮点击监听器 + Btn_fenlei.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + // 在按钮点击时执行的操作 + // 创建跳转到 FragmentList 活动界面的 Intent + Intent intent = new Intent(getActivity(),FragmentList.class); + // 启动 FragmentList 活动界面 + startActivity(intent); + } + }); + + return rootView; + } +} + + diff --git a/app/src/main/java/com/example/goukumusic/Fragment_singer.java b/app/src/main/java/com/example/goukumusic/Fragment_singer.java new file mode 100644 index 0000000..ad1255c --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/Fragment_singer.java @@ -0,0 +1,16 @@ +package com.example.goukumusic; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; + +public class Fragment_singer extends Fragment { + @Override + public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle saveInstanceState){ + // 创建Fragment布局 + return inflater.inflate(R.layout.singer,container,false); + } +} diff --git a/app/src/main/java/com/example/goukumusic/Fragment_singleinformation.java b/app/src/main/java/com/example/goukumusic/Fragment_singleinformation.java new file mode 100644 index 0000000..1b9dcdf --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/Fragment_singleinformation.java @@ -0,0 +1,40 @@ +package com.example.goukumusic; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; + +public class Fragment_singleinformation extends Fragment { + @Override + public View onCreateView( LayoutInflater inflater,ViewGroup container,Bundle saveInstanceState){ + // 创建Fragment布局 + return inflater.inflate(R.layout.information,container,false); + } +// @Override +// protected void onCreate(Bundle savedInstanceStat){ +// TextView Name = (TextView) findViewById(R.id.username); +//// TextView Password = (TextView) findViewById(R.id.password); +// // 接受上传的参数 +// Intent intent = this.getIntent(); +// Bundle bundle = intent.getExtras(); +// assert bundle != null; +// String username = bundle.getString("user_name"); +// String password = bundle.getString("user_password"); +// // 将接受的参数和文件控件绑定 +// Name.setText(String.format("用户名: %s", username)); +//// Password.setText(String.format("密码: %s", password)); +// Button button2 = (Button) findViewById(R.id.btn_return_login); +// button2.setOnClickListener(new View.OnClickListener() { // 设置按钮的监听器 +// @Override +// public void onClick(View v) { +// // 创建intent对象 +// Intent intent = new Intent(LoginSuccess.this,MainActivity.class); +// startActivity(intent); //启动Activity +// finish(); //关闭Activity +// } +// }); +// } +} diff --git a/app/src/main/java/com/example/goukumusic/Fragment_song.java b/app/src/main/java/com/example/goukumusic/Fragment_song.java new file mode 100644 index 0000000..6a4bac3 --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/Fragment_song.java @@ -0,0 +1,77 @@ +package com.example.goukumusic; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Fragment_song extends Fragment { + private ListView mListView; + private MyAdapter myAdapter; + private List> list = new ArrayList>(); + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // 创建Fragment布局 + View rootView = inflater.inflate(R.layout.song, container, false); + initData(); + mListView = rootView.findViewById(R.id.listview); + myAdapter = new MyAdapter(list, getActivity()); // 传入 getActivity() 获取关联的 Activity 上下文 + mListView.setAdapter(myAdapter); + return rootView; + } + + // 自定义数据,也可以添加网络数据 + private void initData(){ + Map map = new HashMap(); + map.put("img",R.drawable.beijinglife); + map.put("textview1","薛之谦"); + map.put("textview2","那是你离开了北京的生活"); + map.put("button","播放"); + list.add(map); + + map = new HashMap(); + map.put("img",R.drawable.believe); + map.put("textview1","周杰伦"); + map.put("textview2","我是如此相信"); + map.put("button","播放"); + list.add(map); + + map = new HashMap(); + map.put("img",R.drawable.qishi); + map.put("textview1","薛之谦"); + map.put("textview2","其实"); + map.put("button","播放"); + list.add(map); + + map = new HashMap(); + map.put("img",R.drawable.towardsun); + map.put("textview1","华晨宇"); + map.put("textview2","向阳而生"); + map.put("button","播放"); + list.add(map); + + map = new HashMap(); + map.put("img",R.drawable.yanhuochenai); + map.put("textview1","华晨宇"); + map.put("textview2","烟火里的尘埃"); + map.put("button","播放"); + list.add(map); + + map = new HashMap(); + map.put("img",R.drawable.zuiweida); + map.put("textview1","周杰伦"); + map.put("textview2","最伟大的作品"); + map.put("button","播放"); + list.add(map); + + } +} diff --git a/app/src/main/java/com/example/goukumusic/LoginSuccess.java b/app/src/main/java/com/example/goukumusic/LoginSuccess.java new file mode 100644 index 0000000..266769a --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/LoginSuccess.java @@ -0,0 +1,237 @@ +package com.example.goukumusic; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentTransaction; + + +public class LoginSuccess extends AppCompatActivity implements View.OnClickListener{ + + // 声明Fragment对象 + private Fragment_song fragment1; + private Fragment_singer fragment2; + private Fragment_audio fragment3; + private Fragment_singleinformation fragment4; + private Fragment nowFragment; + // 声明底部标签 + private TextView tab1,tab2,tab3,tab4; + private ImageView image1,image2,image3,image4; + private LinearLayout song; + private LinearLayout singer; + private LinearLayout audio; + private LinearLayout information; + + private Button Btn_return; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login_success); + initUI(); //初始化UI方法 + } + + // 初始化UI界面 + private void initUI(){ + // 初始化底部图像 + image1 = findViewById(R.id.imageone); + image2 = findViewById(R.id.imagetwo); + image3 = findViewById(R.id.imagethree); + image4 = findViewById(R.id.imagefour); + // 初始化底部标签 + tab1 = findViewById(R.id.one); + tab2 = findViewById(R.id.two); + tab3 = findViewById(R.id.three); + tab4 = findViewById(R.id.four); + // 初始化布局标签 + song = findViewById(R.id.song); + singer = findViewById(R.id.singer); + audio = findViewById(R.id.audio); + information = findViewById(R.id.singleinformation); + + // 设置底部标签的变化,默认第一个被选中 + image1.setImageResource(R.drawable.song1); + tab1.setTextColor(Color.parseColor("#41C9E2")); + tab2.setTextColor(Color.parseColor("#8a8a8a")); + tab3.setTextColor(Color.parseColor("#8a8a8a")); + tab4.setTextColor(Color.parseColor("#8a8a8a")); + + // 为底部标签设置点击事件 + song.setOnClickListener(this); + singer.setOnClickListener(this); + audio.setOnClickListener(this); + information.setOnClickListener(this); + // 展示初始界面 + showFragment1(); + } + + // 设置Fragment1 + private void showFragment1(){ + // 开启事务,Fragment的切换是由事务控制 + @SuppressLint("CommitTransaction") + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + // 隐藏所有的Fragment + hideAllFragment(transaction); + // 判断Fragment是否为空 + if(fragment1 == null){ + fragment1 = new Fragment_song(); + // 添加到Fragment1到事务中 + transaction.add(R.id.content_layout,fragment1); + } else { + transaction.show(fragment1); + } +// // 记录fragment +// nowFragment = fragment1; + //提交事务 + transaction.commit(); + + // 设置底部标签变化 + tab1.setTextColor(Color.parseColor("#41C9E2")); + tab2.setTextColor(Color.parseColor("#8a8a8a")); + tab3.setTextColor(Color.parseColor("#8a8a8a")); + tab4.setTextColor(Color.parseColor("#8a8a8a")); + // 设置图像的变化 + image1.setImageResource(R.drawable.song1); + image2.setImageResource(R.drawable.singer); + image3.setImageResource(R.drawable.audio); + image4.setImageResource(R.drawable.singleinformation); + } + + // 设置Fragment2 + private void showFragment2(){ + // 开启事务,Fragment的切换是由事务控制 + @SuppressLint("CommitTransaction") + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + // 隐藏所有的Fragment + hideAllFragment(transaction); + // 判断Fragment是否为空 + if(fragment2 == null){ + fragment2 = new Fragment_singer(); + // 添加到Fragment2到事务中 + transaction.add(R.id.content_layout,fragment2); + } else{ + // 显示Fragment + transaction.show(fragment2); + } +// // 记录fragment +// nowFragment = fragment2; + //提交事务 + transaction.commit(); + // 设置底部标签变化 + tab1.setTextColor(Color.parseColor("#8a8a8a")); + tab2.setTextColor(Color.parseColor("#41C9E2")); + tab3.setTextColor(Color.parseColor("#8a8a8a")); + tab4.setTextColor(Color.parseColor("#8a8a8a")); + // 设置图像的变化 + image1.setImageResource(R.drawable.song); + image2.setImageResource(R.drawable.singer1); + image3.setImageResource(R.drawable.audio); + image4.setImageResource(R.drawable.singleinformation); + + } + + // 设置Fragment3 + private void showFragment3(){ + // 开启事务,Fragment的切换是由事务控制 + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + // 隐藏所有的Fragment + hideAllFragment(transaction); + // 判断Fragment是否为空 + if(fragment3 == null){ + fragment3 = new Fragment_audio(); + // 添加Fragment3到事务中 + transaction.add(R.id.content_layout,fragment3); + } else{ + // 显示Fragment + transaction.show(fragment3); + } +// // 记录fragment +// nowFragment = fragment3; + //提交事务 + transaction.commit(); + // 设置底部标签变化 + tab1.setTextColor(Color.parseColor("#8a8a8a")); + tab2.setTextColor(Color.parseColor("#8a8a8a")); + tab3.setTextColor(Color.parseColor("#41C9E2")); + tab4.setTextColor(Color.parseColor("#8a8a8a")); + // 设置图像的变化 + image1.setImageResource(R.drawable.song); + image2.setImageResource(R.drawable.singer); + image3.setImageResource(R.drawable.audio1); + image4.setImageResource(R.drawable.singleinformation); + } + + // 设置Fragment4 + private void showFragment4(){ + // 开启事务,Fragment的切换是由事务控制 + @SuppressLint("CommitTransaction") + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + // 隐藏所有的Fragment + hideAllFragment(transaction); + // 判断Fragment是否为空 + if(fragment4 == null){ + fragment4 = new Fragment_singleinformation(); + // 添加Fragment4到事务中 + transaction.add(R.id.content_layout,fragment4); + } else { + // 显示Fragment + transaction.show(fragment4); + } + //提交事务 + transaction.commit(); + + // 设置底部标签变化 + tab1.setTextColor(Color.parseColor("#8a8a8a")); + tab2.setTextColor(Color.parseColor("#8a8a8a")); + tab3.setTextColor(Color.parseColor("#8a8a8a")); + tab4.setTextColor(Color.parseColor("#41C9E2")); + // 设置图像的变化 + image1.setImageResource(R.drawable.song); + image2.setImageResource(R.drawable.singer); + image3.setImageResource(R.drawable.audio); + image4.setImageResource(R.drawable.singleinformation1); + } + + // 隐藏所有的Fragment + private void hideAllFragment(FragmentTransaction transaction){ + if (fragment1 != null){ + transaction.hide(fragment1); + } + if (fragment2 != null){ + transaction.hide(fragment2); + } + if (fragment3 != null){ + transaction.hide(fragment3); + } + if (fragment4 != null){ + transaction.hide(fragment4); + } + } + + // 设置点击事件 + @Override + public void onClick(View view){ + int id = view.getId(); + if (id == R.id.song){ + showFragment1(); + } + if (id == R.id.singer){ + showFragment2(); + } + if (id == R.id.audio){ + showFragment3(); + } + if (id == R.id.singleinformation){ + showFragment4(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/MainActivity.java b/app/src/main/java/com/example/goukumusic/MainActivity.java new file mode 100644 index 0000000..1f2da43 --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/MainActivity.java @@ -0,0 +1,63 @@ +package com.example.goukumusic; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class MainActivity extends AppCompatActivity { + /** + * author:xiaotao + */ + private EditText UserName,Password; + private Button Btn_login,Btn_tv_register,Btn_tv_find_pwd; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + //组件初始化,获取获取 + UserName = (EditText)findViewById(R.id.username); + Password = (EditText)findViewById(R.id.password); + Btn_login = (Button) findViewById(R.id.btn_login); + Btn_tv_register = (Button) findViewById(R.id.btn_tv_register); + Btn_tv_find_pwd = (Button) findViewById(R.id.btn_tv_find_pwd); + + // 设置登录按钮Btn_login监听器 + Btn_login.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_login = new Intent(MainActivity.this, LoginSuccess.class); + Bundle bundle = new Bundle(); + bundle.putString("user_name", UserName.getText().toString()); + bundle.putString("user_password", Password.getText().toString()); + intent_login.putExtras(bundle); // 上传参数 + startActivity(intent_login); + } + }); + + // 设置立即注册按钮Btn_tv_register监听器 + Btn_tv_register.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_register = new Intent(MainActivity.this, Register.class); + startActivity(intent_register); + } + }); + + // 设置忘记密码按钮Btn_tv_find_pwd监听器 + Btn_tv_find_pwd.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_find_pwd = new Intent(MainActivity.this, ForgetPassword.class); + startActivity(intent_find_pwd); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/MyAdapter.java b/app/src/main/java/com/example/goukumusic/MyAdapter.java new file mode 100644 index 0000000..b22e919 --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/MyAdapter.java @@ -0,0 +1,82 @@ +package com.example.goukumusic; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import java.util.List; +import java.util.Map; + +public class MyAdapter extends BaseAdapter { + // 设置变量 + private List> datas; + private Context mContext; + // 构造函数 + public MyAdapter(List> datas, Context mContext) { + this.datas = datas; + this.mContext = mContext; + } + + @Override + public int getCount() { +// 返回数据的总数 + return datas.size(); + } + + @Override + public Object getItem(int position) { +// 返回所在的位置的数据内容 + return datas.get(position); + } + + @Override + public long getItemId(int position) { +// 返回数据所在的位置 + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + if(convertView == null){ + // 使用自定义布局文件作为Layout + convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_layout, null); +// 减少findView的次数 + holder = new ViewHolder(); + // 初始化布局中的元素 + holder.mImageView = (ImageView) convertView.findViewById(R.id.imageview); + holder.mTextView1 = (TextView) convertView.findViewById(R.id.textview1); + holder.mTextView2 = (TextView) convertView.findViewById(R.id.textview2); + holder.mButton = (Button) convertView.findViewById(R.id.button); + holder.mButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Toast.makeText(mContext,"播放音乐",Toast.LENGTH_SHORT).show(); + } + }); + convertView.setTag(holder); + }else { + holder = (ViewHolder) convertView.getTag(); + } +// 将传入的数据中提取数据并绑定到指定的View中 + holder.mImageView.setImageResource((Integer) datas.get(position).get("img")); + holder.mTextView1.setText(datas.get(position).get("textview1").toString()); + holder.mTextView2.setText(datas.get(position).get("textview2").toString()); + holder.mButton.setText(datas.get(position).get("button").toString()); + return convertView; + } + +// 定义一个静态的ViewHolder + static class ViewHolder{ + ImageView mImageView; + TextView mTextView1; + TextView mTextView2; + Button mButton; + } +} diff --git a/app/src/main/java/com/example/goukumusic/Register.java b/app/src/main/java/com/example/goukumusic/Register.java new file mode 100644 index 0000000..2fee79e --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/Register.java @@ -0,0 +1,54 @@ +package com.example.goukumusic; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import androidx.activity.EdgeToEdge; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; + +public class Register extends AppCompatActivity { + + private EditText UserName,Password; + private Button Btn_register; + private Button Btn_return; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_register); + setTitle("狗酷音乐新用户注册"); + // 添加监控 + UserName = (EditText) findViewById(R.id.username); + Password = (EditText) findViewById(R.id.password); + Btn_register = (Button) findViewById(R.id.btn_register); + Btn_return = (Button) findViewById(R.id.btn_return); + + // 设置注册按钮btn_register监听器 + Btn_register.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_register = new Intent(Register.this, MainActivity.class); + Bundle bundle1 = new Bundle(); + bundle1.putString("user_name", UserName.getText().toString()); + bundle1.putString("user_password", Password.getText().toString()); + intent_register.putExtras(bundle1); //上传注册的参数 + startActivity(intent_register); + } + }); + + // 设置返回按钮btn_return监听器 + Btn_return.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent_return = new Intent(Register.this, MainActivity.class); + startActivity(intent_return); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/goukumusic/TitleFragment.java b/app/src/main/java/com/example/goukumusic/TitleFragment.java new file mode 100644 index 0000000..0fc2d2e --- /dev/null +++ b/app/src/main/java/com/example/goukumusic/TitleFragment.java @@ -0,0 +1,84 @@ +package com.example.goukumusic; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ListView; +import android.widget.TextView; + + +public class TitleFragment extends Fragment { + private View view; + private String[] title; + private String[][] contents; + private int[] images; + private ListView listView; +// onCreateView() 方法是 Fragment 生命周期中的一个重要方法,在该方法中会加载 Fragment 的布局, +// 并初始化视图。在这里,通过调用 inflater.inflate() 方法加载布局文件 fragment_title.xml。 + public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle saveInstanceState){ + view = inflater.inflate(R.layout.fragment_title,container,false); +// 获取了 FragmentList Activity 中的标题、内容和图片资源数组。 + // 获取Activity实例对象 + FragmentList activity = (FragmentList) getActivity(); + // 获取Activity中的标题 + assert activity != null; + title = activity.getTitles(); + // 获取Activity中标题和内容; + contents = activity.getSettingText(); + // 获取Activity中的图片 + images = activity.getImageResources(); + if(view!=null){ + init(); + } +// 列表视图的点击事件中,通过获取 ContentFragment 实例, +// 并调用 setText() 方法设置内容文本,调用 setImage() 方法设置图片。 + // 为ListView添加监听 + listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + // 通过Activity实例获取另一个Fragment对象 + ContentFragment content = (ContentFragment) ((FragmentList)getActivity()). + getSupportFragmentManager().findFragmentById(R.id.setcontent); + assert content != null; + content.setText(contents[i]); + content.setImage(i); + } + }); + return view; + } + private void init(){ + listView = (ListView) view.findViewById(R.id.titlelist); + if (title != null){ + listView.setAdapter(new MyAdapter()); + } +} +//适配器 +class MyAdapter extends BaseAdapter{ + @Override + public int getCount() { + return title.length; + } + @Override + public Object getItem(int i) { + return title[i]; + } + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + view = View.inflate(getActivity(), R.layout.title_item_layout,null); + TextView titletext = (TextView) view.findViewById(R.id.titles); + titletext.setText(title[i]); + return view; + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/audio.png b/app/src/main/res/drawable/audio.png new file mode 100644 index 0000000..3f13377 Binary files /dev/null and b/app/src/main/res/drawable/audio.png differ diff --git a/app/src/main/res/drawable/audio1.png b/app/src/main/res/drawable/audio1.png new file mode 100644 index 0000000..309828f Binary files /dev/null and b/app/src/main/res/drawable/audio1.png differ diff --git a/app/src/main/res/drawable/background.jpeg b/app/src/main/res/drawable/background.jpeg new file mode 100644 index 0000000..9f5f54e Binary files /dev/null and b/app/src/main/res/drawable/background.jpeg differ diff --git a/app/src/main/res/drawable/beijinglife.png b/app/src/main/res/drawable/beijinglife.png new file mode 100644 index 0000000..ec6b242 Binary files /dev/null and b/app/src/main/res/drawable/beijinglife.png differ diff --git a/app/src/main/res/drawable/believe.png b/app/src/main/res/drawable/believe.png new file mode 100644 index 0000000..1dd9d2a Binary files /dev/null and b/app/src/main/res/drawable/believe.png differ diff --git a/app/src/main/res/drawable/bg1.jpeg b/app/src/main/res/drawable/bg1.jpeg new file mode 100644 index 0000000..336f71d Binary files /dev/null and b/app/src/main/res/drawable/bg1.jpeg differ diff --git a/app/src/main/res/drawable/buttonstyle.xml b/app/src/main/res/drawable/buttonstyle.xml new file mode 100644 index 0000000..bdba39c --- /dev/null +++ b/app/src/main/res/drawable/buttonstyle.xml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_border.xml b/app/src/main/res/drawable/circular_border.xml new file mode 100644 index 0000000..0ed4215 --- /dev/null +++ b/app/src/main/res/drawable/circular_border.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/doupo.png b/app/src/main/res/drawable/doupo.png new file mode 100644 index 0000000..28d496b Binary files /dev/null and b/app/src/main/res/drawable/doupo.png differ diff --git a/app/src/main/res/drawable/dpcq.png b/app/src/main/res/drawable/dpcq.png new file mode 100644 index 0000000..f422a29 Binary files /dev/null and b/app/src/main/res/drawable/dpcq.png differ diff --git a/app/src/main/res/drawable/dxp.png b/app/src/main/res/drawable/dxp.png new file mode 100644 index 0000000..197cda5 Binary files /dev/null and b/app/src/main/res/drawable/dxp.png differ diff --git a/app/src/main/res/drawable/dzq.png b/app/src/main/res/drawable/dzq.png new file mode 100644 index 0000000..5a0cd27 Binary files /dev/null and b/app/src/main/res/drawable/dzq.png differ diff --git a/app/src/main/res/drawable/gouku.png b/app/src/main/res/drawable/gouku.png new file mode 100644 index 0000000..774f53e Binary files /dev/null and b/app/src/main/res/drawable/gouku.png differ diff --git a/app/src/main/res/drawable/hcy.png b/app/src/main/res/drawable/hcy.png new file mode 100644 index 0000000..a457982 Binary files /dev/null and b/app/src/main/res/drawable/hcy.png differ diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/iu.png b/app/src/main/res/drawable/iu.png new file mode 100644 index 0000000..1e4ae4c Binary files /dev/null and b/app/src/main/res/drawable/iu.png differ diff --git a/app/src/main/res/drawable/luoxiang.png b/app/src/main/res/drawable/luoxiang.png new file mode 100644 index 0000000..7706270 Binary files /dev/null and b/app/src/main/res/drawable/luoxiang.png differ diff --git a/app/src/main/res/drawable/mby.png b/app/src/main/res/drawable/mby.png new file mode 100644 index 0000000..1fb18f3 Binary files /dev/null and b/app/src/main/res/drawable/mby.png differ diff --git a/app/src/main/res/drawable/mofei.png b/app/src/main/res/drawable/mofei.png new file mode 100644 index 0000000..70b6619 Binary files /dev/null and b/app/src/main/res/drawable/mofei.png differ diff --git a/app/src/main/res/drawable/nfk.png b/app/src/main/res/drawable/nfk.png new file mode 100644 index 0000000..775ca7e Binary files /dev/null and b/app/src/main/res/drawable/nfk.png differ diff --git a/app/src/main/res/drawable/psw_icon.png b/app/src/main/res/drawable/psw_icon.png new file mode 100644 index 0000000..b27fb7e Binary files /dev/null and b/app/src/main/res/drawable/psw_icon.png differ diff --git a/app/src/main/res/drawable/psw_icon_again.png b/app/src/main/res/drawable/psw_icon_again.png new file mode 100644 index 0000000..af8c225 Binary files /dev/null and b/app/src/main/res/drawable/psw_icon_again.png differ diff --git a/app/src/main/res/drawable/qishi.png b/app/src/main/res/drawable/qishi.png new file mode 100644 index 0000000..b460398 Binary files /dev/null and b/app/src/main/res/drawable/qishi.png differ diff --git a/app/src/main/res/drawable/register_psw_bg.png b/app/src/main/res/drawable/register_psw_bg.png new file mode 100644 index 0000000..ba6e1b3 Binary files /dev/null and b/app/src/main/res/drawable/register_psw_bg.png differ diff --git a/app/src/main/res/drawable/register_user_name_bg.png b/app/src/main/res/drawable/register_user_name_bg.png new file mode 100644 index 0000000..00957bf Binary files /dev/null and b/app/src/main/res/drawable/register_user_name_bg.png differ diff --git a/app/src/main/res/drawable/return1.png b/app/src/main/res/drawable/return1.png new file mode 100644 index 0000000..4834776 Binary files /dev/null and b/app/src/main/res/drawable/return1.png differ diff --git a/app/src/main/res/drawable/santi.png b/app/src/main/res/drawable/santi.png new file mode 100644 index 0000000..5b3a481 Binary files /dev/null and b/app/src/main/res/drawable/santi.png differ diff --git a/app/src/main/res/drawable/singer.png b/app/src/main/res/drawable/singer.png new file mode 100644 index 0000000..5fb1706 Binary files /dev/null and b/app/src/main/res/drawable/singer.png differ diff --git a/app/src/main/res/drawable/singer1.png b/app/src/main/res/drawable/singer1.png new file mode 100644 index 0000000..0fbfe74 Binary files /dev/null and b/app/src/main/res/drawable/singer1.png differ diff --git a/app/src/main/res/drawable/singleinformation.png b/app/src/main/res/drawable/singleinformation.png new file mode 100644 index 0000000..2095279 Binary files /dev/null and b/app/src/main/res/drawable/singleinformation.png differ diff --git a/app/src/main/res/drawable/singleinformation1.png b/app/src/main/res/drawable/singleinformation1.png new file mode 100644 index 0000000..1c9b820 Binary files /dev/null and b/app/src/main/res/drawable/singleinformation1.png differ diff --git a/app/src/main/res/drawable/song.png b/app/src/main/res/drawable/song.png new file mode 100644 index 0000000..701fb40 Binary files /dev/null and b/app/src/main/res/drawable/song.png differ diff --git a/app/src/main/res/drawable/song1.png b/app/src/main/res/drawable/song1.png new file mode 100644 index 0000000..a4952a9 Binary files /dev/null and b/app/src/main/res/drawable/song1.png differ diff --git a/app/src/main/res/drawable/syz.png b/app/src/main/res/drawable/syz.png new file mode 100644 index 0000000..9846a7b Binary files /dev/null and b/app/src/main/res/drawable/syz.png differ diff --git a/app/src/main/res/drawable/tiancai.png b/app/src/main/res/drawable/tiancai.png new file mode 100644 index 0000000..ab6cf2a Binary files /dev/null and b/app/src/main/res/drawable/tiancai.png differ diff --git a/app/src/main/res/drawable/towardsun.png b/app/src/main/res/drawable/towardsun.png new file mode 100644 index 0000000..3f14542 Binary files /dev/null and b/app/src/main/res/drawable/towardsun.png differ diff --git a/app/src/main/res/drawable/user_name_icon.png b/app/src/main/res/drawable/user_name_icon.png new file mode 100644 index 0000000..1384f87 Binary files /dev/null and b/app/src/main/res/drawable/user_name_icon.png differ diff --git a/app/src/main/res/drawable/xzq.png b/app/src/main/res/drawable/xzq.png new file mode 100644 index 0000000..9074be7 Binary files /dev/null and b/app/src/main/res/drawable/xzq.png differ diff --git a/app/src/main/res/drawable/yanhuochenai.png b/app/src/main/res/drawable/yanhuochenai.png new file mode 100644 index 0000000..95f3061 Binary files /dev/null and b/app/src/main/res/drawable/yanhuochenai.png differ diff --git a/app/src/main/res/drawable/zbc.png b/app/src/main/res/drawable/zbc.png new file mode 100644 index 0000000..90a81b1 Binary files /dev/null and b/app/src/main/res/drawable/zbc.png differ diff --git a/app/src/main/res/drawable/zhua.png b/app/src/main/res/drawable/zhua.png new file mode 100644 index 0000000..777c2f3 Binary files /dev/null and b/app/src/main/res/drawable/zhua.png differ diff --git a/app/src/main/res/drawable/zhualuoye.png b/app/src/main/res/drawable/zhualuoye.png new file mode 100644 index 0000000..5ead899 Binary files /dev/null and b/app/src/main/res/drawable/zhualuoye.png differ diff --git a/app/src/main/res/drawable/zj.png b/app/src/main/res/drawable/zj.png new file mode 100644 index 0000000..4ca88fb Binary files /dev/null and b/app/src/main/res/drawable/zj.png differ diff --git a/app/src/main/res/drawable/zjl.png b/app/src/main/res/drawable/zjl.png new file mode 100644 index 0000000..ea324e0 Binary files /dev/null and b/app/src/main/res/drawable/zjl.png differ diff --git a/app/src/main/res/drawable/zuiweida.png b/app/src/main/res/drawable/zuiweida.png new file mode 100644 index 0000000..8ac70a8 Binary files /dev/null and b/app/src/main/res/drawable/zuiweida.png differ diff --git a/app/src/main/res/layout/activity_forget_password.xml b/app/src/main/res/layout/activity_forget_password.xml new file mode 100644 index 0000000..8234bdb --- /dev/null +++ b/app/src/main/res/layout/activity_forget_password.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +