Dies ist ein einfaches Musik-Player-Projekt, das ich letztes Jahr in meinem zweiten Jahr gemacht habe: Es wurde so viel wie möglich geschrieben, um Kugou Music zu imitieren, und die spezifischen Funktionen sind wie folgt:
1: Startanimation: Klicken Sie, um das Programm auszuführen, und es erscheint ein zweisekündiges Video, ähnlich der Startanimation von Kugou Music, sehr beeindruckend!
2: Login-Registrierungsschnittstelle: Geben Sie die Kontonummer und das Passwort ein, um die Anmeldeinformationen zu überprüfen!
3: Karussell: Genau das gleiche wie bei Kugou Music, es gibt ein automatisches Zykluskarussell über der Hauptschnittstelle, klicken Sie auf die Bildinformationen des Karussells, um den entsprechenden spezifischen Service aufzurufen, sehr zusätzliche Punkte!
4: Der Plattenspieler der Musikaufnahme, der Fortschrittsbalken der Songsynchronisierung und das Anhalten/Wiedergeben/Fortfahren/Umschalten der Musik!
5: Musiksuche ist realisiert!
6: Spielen Sie die Videosäule ab!
7; Das Layout der persönlichen Informationsschnittstelle wird realisiert, wie z. B. Feedback, Bewertung, mehr, Geschlecht, Alter, Spitzname, Sammlung usw.!
Der Karussellcode lautet wie folgt:
Paket com.ypc.xiaoxiongmusic; import android.annotation.SuppressLint; import android.content.Intent; import android.media.Image; import android.net.Uri; android.os.Bundle importieren; import android.os.Handler; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.Menu; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.SearchView; import android.widget.TextView; android.app.Fragment importieren; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; java.util.ArrayList importieren; java.util.List importieren; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; importiere statische android.view.View.VISIBLE; @SuppressLint("ValidFragment") public class musicFragment erweitert Fragment { Listenansicht lv; Suchansicht Suchansicht; privater ViewPager mViewPaper; private List<ImageView>-Bilder; private List<View>-Punkte; private int aktuellesElement; //Position des letzten Punktes aufzeichnen private int altePosition = 0; // Speichern Sie die ID des Bildes private int ausgewählte Position = 0; private ImageView bf; private int[] imageIds = new int[]{ R.drawable.lunchat1, R.drawable.lunchatu2, R.drawable.lunchatu3, R.drawable.lunchatu2, R.drawable.lunchatu3 }; // Speichern Sie den Titel des Bildes privater String[] Titel = neuer String[]{ "Wir sehen uns wieder, du bist es immer noch", „Ich habe lange auf diesen Tag gewartet“, "Das geniale Mädchen kehrt wieder zurück", "Stell dir Musik vor, erleuchte dich und mich", "HALLO, DY.MEMORY" }; privater TextView-Titel; privater ViewPagerAdapter-Adapter; privater ScheduledExecutorService scheduledExecutorService; private statische Liste<Ganzzahl> sPics=neue ArrayList<>(); // verwendet, um die Farbe zu dieser Zeit zu testen /* statisch { sPics.add (R.drawable.b1); sPics.add (R.drawable.b2); sPics.add (R.drawable.b3); }*/ private ImageView m1,m2,m3,m4; private Ansicht Ansicht; public static String[] name={"Taeyeon(태연) - 들리나요(Kannst du mich hören)","Taeyeon(태연) - 제주도의푸른밤(Blue Night of Jeju Island)","Taeyeon(태연) ) - 그리고하나 (There is one more)“, „Tae Yeon (태연) – Rescue Me“, „Tae Yeon (태연) – My Love (Duett Ver.)“, „Hua Chenyu – I really want to love this world (Live )", „Hua Chenyu – Gespräche mit den Kindern des Mars“, „Hua Chenyu – Der König und der Bettler“, „Hua Chenyu – Stierkampf (Live)“, „Hua Chenyu – Staub im Feuerwerk“, „Hua Chenyu – Irrenhaus (Live) ", "Hua Chenyu- Travel Around", "Hua Chenyu- Searching", "Hua Chenyu- Boring People", "Hua Chenyu- For Forever", "Hua Chenyu- Mayfly", "Hua Chenyu- We (Live)", "Hua Chenyu Woo-Heterogen", „Hua Chenyu – Ich sorge mich um dich“, „Hua Chenyu – Du musst glauben, dass dies nicht der letzte Tag ist“, „Hua Chenyu – Jackdaw Boy“, „Hua Chenyu – Qi Tian“, „Zhang Yixing – wird alles gut “, „Zhang Yixing – Gute Nacht“, „Zhang Yixing – Allein“, „Zhang Yixing – Maske (Live)“, „Zhang Yixing – Oma“, „Zhang Yixing – Ich bin nicht gut“, „Zhang Yixing – Beten“ , "Tae Yeon (태연) - Gee (Busking Ver.)(Live)", "TAEYEON(태연) - 만약에(If) (Busking Ver.)(Live)", "Tae Yeon (태연) - Bösewicht (Busking Ver.) (Live)", "Tae Yeon (태연) - 기억을걷는시간 (Time to Gather Memories) (Busking Ver.) (Live)", "Leslie Cheung - Seltsam, du bist zu schön“, „Leslie Cheung – linke und rechte Hand“, „Leslie Cheung – zumindest du (00 Live) (Live-Version)“, „Leslie Cheung-me“}; public static int[] icons={R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx, R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx ,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx .drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx ,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx,R.drawable.musicx .drawable.musicx,R.drawable.musicx}; @Überschreiben öffentliche Ansicht onCreateView(LayoutInflater Inflater, ViewGroup Container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_music, container, false); //lv.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, name)); searchView =view.findViewById(R.id.sv); lv=view.findViewById(R.id.lv); lv.setTextFilterEnabled (true); // Suchtext-Listener festlegen searchView.setOnQueryTextListener (neuer SearchView.OnQueryTextListener() { // Diese Methode wird ausgelöst, wenn auf die Suchschaltfläche geklickt wird @Überschreiben public boolean onQueryTextSubmit(String-Abfrage) { falsch zurückgeben; } // Diese Methode auslösen, wenn sich der Suchinhalt ändert @Überschreiben public boolean onQueryTextChange(String neuerText) { if (!TextUtils.isEmpty(newText)){ lv.setFilterText(neuerText); }anders{ lv.clearTextFilter(); } falsch zurückgeben; } }); bf=view.findViewById(R.id.bf); mViewPaper = (ViewPager)Ansicht. findViewById (R.id.vp); Bilder = neue ArrayList<ImageView>(); for(int i = 0; i <imageIds.length; i++){ ImageView imageView = new ImageView(getActivity()); imageView.setBackgroundResource(imageIds[i]); images.add (Bildansicht); } Punkte = neue ArrayList<View>(); dots.add(view.findViewById(R.id.dot_0)); dots.add(view.findViewById(R.id.dot_1)); dots.add(view.findViewById(R.id.dot_2)); dots.add(view.findViewById(R.id.dot_3)); dots.add(view.findViewById(R.id.dot_4)); title = (TextView) view.findViewById (R.id.title); title.setText(titel[0]); Adapter = neuer ViewPagerAdapter(); mViewPaper.setAdapter (Adapter); //Auf die Ontauch-Klick-Methode der Illustration mViewPaper.setOnTouchListener (neuer View.OnTouchListener() { int Flocke = 0 ; public boolean onTouch(View v, MotionEvent-Ereignis) { Schalter (event.getAction()) { Fall MotionEvent.ACTION_DOWN: Flocke = 0 ; brechen ; Fall MotionEvent.ACTION_MOVE: Flocke = 1 ; brechen ; Fall MotionEvent.ACTION_UP : wenn (Flag == 0) { int item = mViewPaper.getCurrentItem(); wenn (Element == 0) { Absicht Absicht = neue Absicht (); intention.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//Fügen Sie den Link hier ein intention.setData (Inhalts-URL); startActivity (Absicht); } Sonst wenn (Element == 1) { Absicht Absicht = neue Absicht (); intention.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//Fügen Sie den Link hier ein intention.setData (Inhalts-URL); startActivity (Absicht); } Sonst wenn (Element == 2) { Absicht Absicht = neue Absicht (); intention.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//Fügen Sie den Link hier ein intention.setData (Inhalts-URL); startActivity (Absicht); }sonst wenn (Element == 3) { Absicht Absicht = neue Absicht (); intention.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//Fügen Sie den Link hier ein intention.setData (Inhalts-URL); startActivity (Absicht); } Sonst wenn (Element == 4) { Absicht Absicht = neue Absicht (); intention.setAction("android.intent.action.VIEW"); Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//Fügen Sie den Link hier ein intention.setData (Inhalts-URL); startActivity (Absicht); } } brechen ; } falsch zurückgeben; } }); mViewPaper.setOnPageChangeListener (neuer ViewPager.OnPageChangeListener() { @Überschreiben public void onPageSelected(int position) { title.setText (Titel [Position]); dots.get(position).setBackgroundResource(R.drawable.red); //Toast.makeText(getActivity(),"hurhurhghrui",Toast.LENGTH_SHORT).show(); dots.get(oldPosition).setBackgroundResource(R.drawable.pure); altePosition = Position; aktuellerArtikel = Position; } @Überschreiben public void onPageScrolled(int arg0, float arg1, int arg2) { } @Überschreiben public void onPageScrollStateChanged(int arg0) { } }); m1=view.findViewById(R.id.m1); m2=view.findViewById(R.id.m2); m3=view.findViewById(R.id.m3); m4=view.findViewById(R.id.m4); m1.setOnClickListener (neuer View.OnClickListener() { @Überschreiben public void onClick(View view) { Absicht intention4=neue Absicht(getActivity(),tukuActivity.class); startActivity(intent4); } }); m2.setOnClickListener (neuer View.OnClickListener() { @Überschreiben public void onClick(View view) { Absicht intention5=neue Absicht(getActivity(),paihangbangActivity.class); StartAktivität (Absicht5); } }); m3.setOnClickListener (neuer View.OnClickListener() { @Überschreiben public void onClick(View view) { Absicht intention6=neue Absicht(getActivity(),fenleiActivity.class); startActivity(intent6); } }); //ListView listView=view.findViewById(R.id.lv); MyBaseAdapter adapter=neuer MyBaseAdapter(); lv.setAdapter (Adapter); lv.setOnItemClickListener (neuer AdapterView.OnItemClickListener() { @Überschreiben public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intention=new Intent(getActivity(),Music_Activity.class);//Erzeuge ein Intent-Objekt und starte die Prüfung //Daten im Intent-Objekt speichern intention.putExtra("name",name[position]); intention.putExtra("position",String.valueOf(position)); startActivity (Absicht); lv.setSelector (R.drawable.bf1); } }); Rückansicht; } private Klasse ViewPagerAdapter erweitert PagerAdapter { @Überschreiben public int getCount() { Bilder zurückgeben. Größe (); } @Überschreiben public boolean isViewFromObject(Ansicht arg0, Objekt arg1) { Rückgabe arg0 == arg1; } @Überschreiben public void destroyItem(ViewGroup view, int position, Object object) { // TODO Automatisch generierter Methoden-Stub view.removeView (images.get (Position)); } @Überschreiben öffentliches Objekt instantiateItem (ViewGroup-Ansicht, int-Position) { // TODO Automatisch generierter Methoden-Stub view.addView (images.get (Position)); Bilder zurückgeben.get (Position); } } /* @Überschreiben public boolean onCreateOptionsMenu(Menü menu) { // Menü aufblasen; Dadurch werden Elemente zur Aktionsleiste hinzugefügt, falls vorhanden. getMenuInflater().inflate(R.menu.main, menu); gib true zurück; }*/ /** * Verwenden Sie den Thread-Pool, um das Animationskarussell regelmäßig auszuführen */ @Überschreiben public void onStart() { // TODO Automatisch generierter Methoden-Stub super.onStart(); scheduleExecutorService = Executors.newSingleThreadScheduledExecutor(); geplantExecutorService.scheduleWithFixedDelay( neue ViewPageTask(), 2, 2, Zeiteinheit.SEKUNDEN); } /** * Bildkarussell-Aufgabe * @Autor liuyazhuang * */ private Klasse ViewPageTask implementiert Runnable{ @Überschreiben öffentlich void run() { aktuellesElement = (aktuellesElement + 1) % imageIds.length; mHandler.sendEmptyMessage(0); } } /** * Empfangen Sie die vom untergeordneten Thread übergebenen Daten */ private Handler mHandler = new Handler(){ public void handleMessage(android.os.Message msg) { mViewPaper.setCurrentItem(aktuellesItem); }; }; @Überschreiben öffentliche void onStop() { // TODO Automatisch generierter Methoden-Stub super.onStop(); if(scheduledExecutorService != null){ geplantExecutorService.shutdown(); geplantExecutorService = null; } } Klasse MyBaseAdapter erweitert BaseAdapter{ @Überschreiben public int getCount(){Rückgabename.Länge;} @Überschreiben öffentliches Objekt getItem(int i){Rückgabename[i];} @Überschreiben public long getItemId(int i){return i;} @Überschreiben public View getView(int i ,View convertView, ViewGroup parent) { View view=View.inflate(musicFragment.this.getActivity(),R.layout.item_layout,null); TextView tv_name=view.findViewById(R.id.item_name); ImageView iv=view.findViewById(R.id.iv); ImageView bf=view.findViewById(R.id.bf); tv_name.setText(name[i]); iv.setImageResource(Symbole[i]); Rückansicht; } } }
Der entsprechende Code der XML-Schnittstellendatei lautet wie folgt:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertikal"> <Suchansicht android:id="@+id/sv" android:layout_width="match_parent" android:layout_height="wrap_content"/> <androidx.viewpager.widget.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="213dp"></androidx.viewpager.widget.ViewPager> <LinearesLayout android:layout_width="match_parent" android:layout_height="45dip" android:layout_gravity="unten" android:background="@drawable/pure" android:gravity="center" android:orientierung="vertikal" > <Textansicht android:id="@+id/titel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bildtitel" android:textColor="#0C0C0C" /> <LinearesLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dip" android:orientation="horizontal" > <Ansehen android:id="@+id/dot_0" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="#66BD0F32"/> <Ansehen android:id="@+id/dot_1" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="#66BD0F32"/> <Ansehen android:id="@+id/dot_2" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="#66BD0F32"/> <Ansehen android:id="@+id/dot_3" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="#66BD0F32"/> <Ansehen android:id="@+id/dot_4" android:layout_width="5dip" android:layout_height="5dip" android:layout_marginLeft="2dip" android:layout_marginRight="2dip" android:background="#66BD0F32"/> </LinearLayout> </LinearLayout> <LinearesLayout android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="83dp" android:orientation="horizontal"> <Bildansicht android:id="@+id/m1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:src="@drawable/ylu" /> <Bildansicht android:layout_weight="1" android:id="@+id/m2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/phbang" /> <Bildansicht android:layout_weight="1" android:id="@+id/m3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/flei" /> <Bildansicht android:layout_weight="1" android:id="@+id/m4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:src="@drawable/cnxhuan" /> </LinearLayout> <Listenansicht android:background="@drawable/yybj1" android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
Der Screenshot des Effekts sieht wie folgt aus: