• Android音乐播放器(三)轮播图


    这是去年大二做的一个简单音乐播放器项目:是尽可能模仿酷狗音乐写的,具体实现的功能如下:

    1:启动动画:点击运行程序会出现一个两秒钟的视频,类似酷狗音乐的启动动画一样,非常可观!

    2:登录注册界面:输入账号和密码检验信息登录!

    3:轮播图:和酷狗音乐的一模一样,在主界面的上方有一个自动循环的轮播图,点击轮播图的每一个图片信息即可进入对应的具体服务,非常具有加分点!

    4:音乐唱片的转盘,歌曲同步进度条,以及音乐的暂停/播放/继续/上下曲切换!

    5:音乐的搜索实现!

    6:视频专栏的播放!

    7;个人信息界面的布局实现,如反馈,评分,更多,性别年龄昵称,收藏等!

    轮播图代码如下:

    package com.ypc.xiaoxiongmusic;
    import android.annotation.SuppressLint;
    import android.content.Intent;
    import android.media.Image;
    import android.net.Uri;
    import android.os.Bundle;
    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;
    import android.app.Fragment;
    
    import androidx.viewpager.widget.PagerAdapter;
    import androidx.viewpager.widget.ViewPager;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    import static android.view.View.VISIBLE;
    
    @SuppressLint("ValidFragment")
    public class musicFragment extends Fragment  {
        ListView lv;
        SearchView searchView;
        private ViewPager mViewPaper;
        private List images;
        private List dots;
        private int currentItem;
        //记录上一次点的位置
        private int oldPosition = 0;
        //存放图片的id
        private int selectedPosition=0;
        private ImageView bf;
        private int[] imageIds = new int[]{
                R.drawable.lunchatu1,
                R.drawable.lunchatu2,
                R.drawable.lunchatu3,
                R.drawable.lunchatu2,
                R.drawable.lunchatu3
        };
        //存放图片的标题
        private String[]  titles = new String[]{
                "再次相见,还是你",
                "这一天,我等了好久",
                "天才少女再次回归",
                "畅想音乐,点亮你我",
                "HELLO,DY.MEMORY"
        };
        private TextView title;
        private ViewPagerAdapter adapter;
        private ScheduledExecutorService scheduledExecutorService;
        private static List sPics=new ArrayList<>();
        //当时测试颜色用的
       /* static {
            sPics.add(R.drawable.b1);
            sPics.add(R.drawable.b2);
            sPics.add(R.drawable.b3);
        }*/
        private ImageView m1,m2,m3,m4;
        private View view;
        public static String[] name={"太妍 (태연) - 들리나요(听得见吗)","太妍 (태연) - 제주도의 푸른 밤(济州岛的蓝夜)","太妍 (태연) - 그리고 하나(还有一个)","太妍 (태연) - Rescue Me","太妍 (태연) - My Love (Duet Ver.)","华晨宇 - 好想爱这个世界啊(Live)",
                "华晨宇 - 与火星的孩子对话","华晨宇 - 国王与乞丐","华晨宇 - 斗牛(Live)","华晨宇 - 烟火里的尘埃","华晨宇 - 疯人院(Live)","华晨宇 - 环游","华晨宇 - 寻","华晨宇 - 无聊人","华晨宇 - For Forever","华晨宇 - 蜉蝣","华晨宇 - 我们(Live)","华晨宇 - 异类",
                "华晨宇 - 我管你","华晨宇 - 你要相信这不是最后一天","华晨宇 - 寒鸦少年","华晨宇 - 齐天","张艺兴 - 会好的","张艺兴 - 晚安","张艺兴 - 一个人","张艺兴 - 面罩 (Live)","张艺兴 - 外婆","张艺兴 - 我不好","张艺兴 - 祈愿","太妍 (태연) - Gee (Busking Ver.)(Live)","太妍 (태연) - 만약에(如果) (Busking Ver.)(Live)",
                "太妍 (태연) - bad guy (Busking Ver.)(Live)","太妍 (태연) - 기억을 걷는 시간(聚集记忆的时间) (Busking Ver.)(Live)","张国荣 - 怪你过份美丽","张国荣 - 左右手","张国荣 - 至少还有你 (00 Live)(live版)","张国荣 - 我"};
        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,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};
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    
            View view = inflater.inflate(R.layout.fragment_music, container, false);
            //lv.setAdapter(new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, name));
            searchView =view.findViewById(R.id.sv);
            lv=view.findViewById(R.id.lv);
            lv.setTextFilterEnabled(true);
            // 设置搜索文本监听
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
                // 当点击搜索按钮时触发该方法
                @Override
                public boolean onQueryTextSubmit(String query) {
                    return false;
                }
                // 当搜索内容改变时触发该方法
                @Override
                public boolean onQueryTextChange(String newText) {
                    if (!TextUtils.isEmpty(newText)){
                        lv.setFilterText(newText);
                    }else{
                        lv.clearTextFilter();
                    }
                    return false;
                }
            });
            bf=view.findViewById(R.id.bf);
            mViewPaper = (ViewPager)view. findViewById(R.id.vp);
            images = new ArrayList();
            for(int i = 0; i < imageIds.length; i++){
                ImageView imageView = new ImageView(getActivity());
                imageView.setBackgroundResource(imageIds[i]);
                images.add(imageView);
            }
            dots = new ArrayList();
            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(titles[0]);
            adapter = new ViewPagerAdapter();
            mViewPaper.setAdapter(adapter);
            //论插图的ontauch点击方法
            mViewPaper.setOnTouchListener(new View.OnTouchListener() {
                int flage = 0 ;
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()){
                        case MotionEvent.ACTION_DOWN:
                            flage = 0 ;
                            break ;
                        case MotionEvent.ACTION_MOVE:
                            flage = 1 ;
                            break ;
                        case  MotionEvent.ACTION_UP :
                            if (flage == 0) {
                                int item = mViewPaper.getCurrentItem();
                                if (item == 0) {
                                    Intent intent = new Intent();
                                    intent.setAction("android.intent.action.VIEW");
                                    Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//此处填链接
                                    intent.setData(content_url);
                                    startActivity(intent);
                                } else if (item == 1) {
                                    Intent intent = new Intent();
                                    intent.setAction("android.intent.action.VIEW");
                                    Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//此处填链接
                                    intent.setData(content_url);
                                    startActivity(intent);
                                } else if (item == 2) {
                                    Intent intent = new Intent();
                                    intent.setAction("android.intent.action.VIEW");
                                    Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//此处填链接
                                    intent.setData(content_url);
                                    startActivity(intent);
                                }else if (item == 3) {
                                    Intent intent = new Intent();
                                    intent.setAction("android.intent.action.VIEW");
                                    Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//此处填链接
                                    intent.setData(content_url);
                                    startActivity(intent);
                                } else if (item == 4) {
                                    Intent intent = new Intent();
                                    intent.setAction("android.intent.action.VIEW");
                                    Uri content_url = Uri.parse("https://www.kuaishou.com/f/X-5hKhok9ebbLDq1");//此处填链接
                                    intent.setData(content_url);
                                    startActivity(intent);
                                }
                            }
                            break ;
                    }
                    return false;
                }
            });
            mViewPaper.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    title.setText(titles[position]);
                    dots.get(position).setBackgroundResource(R.drawable.red);
                    //Toast.makeText(getActivity(),"hurhurhghrui",Toast.LENGTH_SHORT).show();
                    dots.get(oldPosition).setBackgroundResource(R.drawable.pure);
                    oldPosition = position;
                    currentItem = position;
                }
                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                }
                @Override
                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(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent4=new Intent(getActivity(),tukuActivity.class);
                    startActivity(intent4);
                }
            });
            m2.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent5=new Intent(getActivity(),paihangbangActivity.class);
                    startActivity(intent5);
                }
            });
            m3.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent6=new Intent(getActivity(),fenleiActivity.class);
                    startActivity(intent6);
                }
            });
            //ListView listView=view.findViewById(R.id.lv);
            MyBaseAdapter adapter=new MyBaseAdapter();
            lv.setAdapter(adapter);
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView parent, View view, int position, long id) {
                    Intent intent=new Intent(getActivity(),Music_Activity.class);//创建Intent对象,启动check
                    //将数据存入Intent对象
                    intent.putExtra("name",name[position]);
                    intent.putExtra("position",String.valueOf(position));
                    startActivity(intent);
                   lv.setSelector(R.drawable.bf1);
                }
            });
            return view;
        }
    
        private class ViewPagerAdapter extends PagerAdapter {
    
            @Override
            public int getCount() {
                return images.size();
            }
    
            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                return arg0 == arg1;
            }
            @Override
            public void destroyItem(ViewGroup view, int position, Object object) {
                // TODO Auto-generated method stub
                view.removeView(images.get(position));
            }
            @Override
            public Object instantiateItem(ViewGroup view, int position) {
                // TODO Auto-generated method stub
                view.addView(images.get(position));
                return images.get(position);
            }
        }
       /* @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }*/
    
        /**
         * 利用线程池定时执行动画轮播
         */
        @Override
        public void onStart() {
            // TODO Auto-generated method stub
            super.onStart();
            scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
            scheduledExecutorService.scheduleWithFixedDelay(
                    new ViewPageTask(),
                    2,
                    2,
                    TimeUnit.SECONDS);
        }
        /**
         * 图片轮播任务
         * @author liuyazhuang
         *
         */
        private class ViewPageTask implements Runnable{
            @Override
            public void run() {
                currentItem = (currentItem + 1) % imageIds.length;
                mHandler.sendEmptyMessage(0);
            }
        }
        /**
         * 接收子线程传递过来的数据
         */
        private Handler mHandler = new Handler(){
            public void handleMessage(android.os.Message msg) {
                mViewPaper.setCurrentItem(currentItem);
            };
        };
        @Override
        public void onStop() {
            // TODO Auto-generated method stub
            super.onStop();
            if(scheduledExecutorService != null){
                scheduledExecutorService.shutdown();
                scheduledExecutorService = null;
            }
        }
        class MyBaseAdapter extends BaseAdapter{
            @Override
            public int getCount(){return  name.length;}
            @Override
            public Object getItem(int i){return name[i];}
            @Override
            public long getItemId(int i){return i;}
    
            @Override
            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(icons[i]);
                return view;
            }
        }
    
    }

    对应的xml界面文件代码如下:

    
    
    
        
    
        
        
    
            
    
            
    
                
    
                
                
                
                
    
            
        
        
    
            
    
            
            
            
    
        
        
    

    效果截图如下:

     

     

  • 相关阅读:
    C语言考试题库之填空题
    第四代可燃气体监测仪:可燃气体监测仪效果有哪些?
    flink技术总结待续
    大厂程序员上班猝死成常态?
    基于Spring Boot+ Vue的健身房管理系统与实现
    MySQL 索引分类
    WMT 2022国际机器翻译大赛发榜,微信翻译斩获三项任务冠军
    9-Spring架构源码分析-IoC 之解析 bean 标签:开启解析进程
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){}卡死
    Codeforces Round #835 (Div. 4) A. Medium Number
  • 原文地址:https://blog.csdn.net/Abtxr/article/details/126856942