设计音乐播放器

268 阅读1分钟

目的:

(1)掌握基本界面组件

(2)掌握使用Intent在Activity之间切换

(3)掌握使用Intent在Activity之间传递数据

主界面的代码:创建主界面的activity,并对底部的歌曲进行点击监听,点击后跳转到播放界面

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private ViewPager2 viewPager2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ConstraintLayout bottombar=findViewById(R.id.bottombar);

        bottombar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MainActivity.this,PlayingActivity.class);
                startActivity(intent);
            }

        });



         viewPager2=findViewById(R.id.id_viewpager2);
        ArrayList<Fragment> fragments=new ArrayList<>();
        OnlineMusicFragment olfragment=new OnlineMusicFragment(MainActivity.this);
        LocalMusicFragment lcfragment=new LocalMusicFragment(MainActivity.this);
        fragments.add(lcfragment);
        fragments.add(olfragment);
        Button local=findViewById(R.id.localmusic);
        Button online=findViewById(R.id.onlinemusic);
        MyFragmentPageAdapter pageAdapter=new MyFragmentPageAdapter(getSupportFragmentManager(),getLifecycle(),fragments);
        viewPager2.setAdapter(pageAdapter);
        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
                switch (position){
                    case 0:
                        local.setTextColor(0xffffffff);
                        online.setTextColor(0xffd6d8da);
                        break;
                    case 1:
                        online.setTextColor(0xffffffff);
                        local.setTextColor(0xffd6d8da);
                        break;

                }
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

        local.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewPager2.setCurrentItem(0);
            }
        });
        online.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                viewPager2.setCurrentItem(1);
            }
        });


    }




    @Override
    public void onClick(View view) {


    }
```主界面的代码:将两个fragment添加到viewpager2里,设置适配器,设置滑动监听器,设置两个按钮的点击监听事件
主界面的代码:将两个fragment添加到viewpager2里,设置适配器,设置滑动监听器,设置两个按钮的点击监听事件

public class LocalMusicFragment extends Fragment {

private static final int MEDIA_READ_REQUEST_CODE = 001;
private Context context;
private String[] projection={MediaStore.Audio.Media.ALBUM_ID,
        MediaStore .Audio .Media.SIZE,
        MediaStore.Audio.Media._ID,
        MediaStore.Audio.Media.DATA,
        MediaStore.Audio.Media.DURATION,
        MediaStore.Audio.Media.TITLE,
        MediaStore.Audio.Media.ARTIST,
        MediaStore.Audio.Media.ALBUM};

public LocalMusicFragment(Context context) {
    this.context = context;
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        ActivityCompat.requestPermissions(getActivity(),new String[]{
                READ_MEDIA_IMAGES,
                READ_MEDIA_AUDIO,
                READ_MEDIA_VIDEO
        },MEDIA_READ_REQUEST_CODE);
    }else{
        ActivityCompat.requestPermissions( getActivity(),new String[]{
                READ_EXTERNAL_STORAGE
        },MEDIA_READ_REQUEST_CODE);
    }
    // Inflate the layout for this fragment
    View view =  inflater.inflate(R.layout.fragment_local_music, container, false);
    RecyclerView recyclerView = view.findViewById(R.id.localmusiclist);
    List<Musicdata> musicdataList = new ArrayList<>();

    Cursor cursor=getContext().getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,projection, MediaStore.Audio.Media.IS_MUSIC + "!= 0",null,null);
    if(cursor != null) {
        while (cursor.moveToNext()){
          Musicdata  musicdata=new Musicdata();
          musicdata.setTitle(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE)));
          musicdata.setSinger(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST)));
          musicdata.setAlbum(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)));
          musicdata.setDuration(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION)));
          musicdata.setUrl(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)));
          musicdata.setId(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)));
          musicdata.setSize(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore .Audio .Media.SIZE)));
          musicdata.setAlbum_id(cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID)));
            Uri trackUri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,musicdata.getId());
            MediaMetadataRetriever mmr=new MediaMetadataRetriever();
            mmr.setDataSource(context,trackUri);
            Bitmap bm;
            if(mmr.getEmbeddedPicture()!=null){
                 bm= BitmapFactory.decodeByteArray(mmr.getEmbeddedPicture(), 0,mmr.getEmbeddedPicture().length);
            }else {
                bm=BitmapFactory.decodeResource(getResources(),R.drawable.default_cover);
            }
            musicdata.setBitmap(bm);
            musicdataList.add(musicdata);
        }
        cursor.close();
    }

    LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);
    Localmusicadapter localmusicadapter = new Localmusicadapter(musicdataList,getActivity());
    recyclerView.setAdapter(localmusicadapter);
    DividerItemDecoration mDivider= new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL);
    recyclerView.addItemDecoration(mDivider);


    return view;
}