1. 程式人生 > >Android 單頁面 音樂播放器和電影播放

Android 單頁面 音樂播放器和電影播放

1,音樂播放器
需求:很簡單能播放音樂 ,下一首上一首。就完事。還有個翻頁 按型別查詢。
2,電影播放器:能夠播放電影,快進,後退。這裡直接用的 框架。
由於比較簡單,就全部寫在一個頁面了。判斷資料型別。顯示不同的頁面。

下面是程式碼;



import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.widget.GridLayoutManager;
import
android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.TextView; import
android.widget.Toast; import com.bumptech.glide.Glide; import com.chad.library.adapter.base.BaseQuickAdapter; import com.lzy.okgo.OkGo; import com.lzy.okgo.callback.StringCallback; import com.lzy.okgo.model.Response; import java.io.IOException; import java.util.List; import java.util.concurrent.ExecutorService; import
java.util.concurrent.Executors; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import cn.jzvd.JZVideoPlayer; import cn.jzvd.JZVideoPlayerStandard; import spa.nabo.com.nabospa.R; import spa.nabo.com.nabospa.adapter.DianshiJvAdapter; import spa.nabo.com.nabospa.adapter.MovieTypeAdapter; import spa.nabo.com.nabospa.adapter.MoviesAdapter; import spa.nabo.com.nabospa.adapter.MusicAdapter; import spa.nabo.com.nabospa.adapter.MusicTypeAdapter; import spa.nabo.com.nabospa.base.BaseActivity; import spa.nabo.com.nabospa.bean.MusicBean; import spa.nabo.com.nabospa.bean.MusicTypeBean; import spa.nabo.com.nabospa.bean.VideosBeans; import spa.nabo.com.nabospa.bean.VideosTypeBean; import spa.nabo.com.nabospa.config.Config; import spa.nabo.com.nabospa.config.URL; import spa.nabo.com.nabospa.utils.GsonUtils; import static spa.nabo.com.nabospa.config.URL.getVideos; /** * Created by ${陳文傑} on 2018/4/2 0002. * Email:[email protected] * 描述:電影 */ public class MoviesActivity extends BaseActivity implements MediaPlayer.OnCompletionListener, MediaPlayer.OnErrorListener, Runnable, View.OnClickListener { @BindView(R.id.back_ll) LinearLayout backLl; @BindView(R.id.movie_type_rl) RecyclerView movieTypeRl; @BindView(R.id.zuixin_tv) TextView zuixinTv; @BindView(R.id.zuire_tv) TextView zuireTv; @BindView(R.id.haoping_tv) TextView haopingTv; @BindView(R.id.title) spa.nabo.com.nabospa.view.title title; @BindView(R.id.movie_rv) RecyclerView movieRv; @BindView(R.id.movie_ll) LinearLayout movieLl; // 預設顯示頁面 @BindView(R.id.movie_xiangqing_ll) RelativeLayout movieXiangqingLl;//詳情頁面 @BindView(R.id.left_iv) ImageView leftIv; @BindView(R.id.yeshu) TextView yeshu; @BindView(R.id.right_iv) ImageView rightIv; @BindView(R.id.xq_movie_iv) ImageView xqMovieIv; @BindView(R.id.xq_movie_name_tv) TextView xqMovieNameTv;//名稱 @BindView(R.id.xq_movie_zhuyan_tv) TextView xqMovieZhuyanTv;//主演 @BindView(R.id.xq_movie_daoyan_tv) TextView xqMovieDaoyanTv;//導演 @BindView(R.id.xq_movie_type_tv) TextView xqMovieTypeTv;//電影型別 @BindView(R.id.xq_movie_addr_tv) TextView xqMovieAddrTv;//地址 @BindView(R.id.xq_movie_paleyNum_tv) TextView xqMoviePaleyNumTv;//播放次數 @BindView(R.id.xq_movie_jishu_rc) RecyclerView xqMovieJishuRc;//每一集 @BindView(R.id.xq_movie_jianjie_tv) TextView xqMovieJianjieTv;// 介紹 @BindView(R.id.hei_ll) LinearLayout heiLl; //電影和音樂,不同的高度 @BindView(R.id.fanye_ll) LinearLayout fanyeLl;//f翻頁按鈕 /*音樂控制元件*/ @BindView(R.id.music_play_img) ImageView musicPlayImg; //當前播放的音樂圖片 @BindView(R.id.music_play_shang) ImageView musicPlayShang;//上一首 @BindView(R.id.music_play_stop) ImageView musicPlayStop;//播放/暫停 @BindView(R.id.music_play_next) ImageView musicPlayNext;//下一首 @BindView(R.id.music_info_tv) TextView musicInfoTv;//歌曲名字-歌手 @BindView(R.id.music_play_volume1_sb) SeekBar musicPlayVolume1Sb;//音量的控制 @BindView(R.id.music_play_sb) SeekBar musicPlaySb;//進度條的控制 @BindView(R.id.music_play_time_tv) TextView musicPlayTimeTv;//播放時間 @BindView(R.id.music_play_times_tv) TextView musicPlayTimesTv;//總時長 @BindView(R.id.play_music_ll) LinearLayout playMusicLl;//進入音樂就顯示這個。電影就隱藏 private List<VideosTypeBean.MsgBodyBean> listVideoType;//電影型別 private MovieTypeAdapter typeAdapter;//型別 介面卡 private MoviesAdapter moviesAdapter;//電影介面卡 private VideosBeans.MsgBodyBean.ListBean.VideosAllBean videoPaths;//電影播放路徑。 private List<VideosBeans.MsgBodyBean.ListBean.VideosAllBean> listVideoJishu;//電影播放路徑。 private List<VideosBeans.MsgBodyBean.ListBean> listVideos;//電影資訊 public static int pageNo = 1;//電影頁數 public static int typeID;//電影型別ID private DianshiJvAdapter mJiShuAdapter;//電視劇 集數 介面卡。 private int movieOrMusicType = 1;//預設 進來是電影,1 音樂是0 private List<MusicTypeBean.MsgBodyBean> mMusicTypes;// 音樂型別 private List<MusicBean.MsgBodyBean> mSongs;//每個型別下面的音樂 private MusicAdapter musicAdapter;//音樂 private MusicTypeAdapter musicTypeAdapter;//音樂 private int songPageNo = 1;//音樂。 private int currIndexMusic = 0;// 表示當前播放的音樂索引 private boolean flagMusic = true;//控制進度條執行緒標記 // 定義當前播放器的狀態״̬ private static final int IDLE = 0; private static final int PAUSE = 1; private static final int START = 2; private static final int CURR_TIME_VALUE = 1; private int currStateMusic = IDLE; // 當前播放器的狀態 //定義執行緒池(同時只能有一個執行緒執行) ExecutorService esaa = Executors.newSingleThreadExecutor(); private MediaPlayer mp;//音樂 JZVideoPlayerStandard jzVideoPlayerStandard; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_movie); ButterKnife.bind(this); movieOrMusicType = getIntent().getIntExtra("mmid", 1); // if (movieOrMusicType == 0) {//音樂 getAllMusic(); initViewMusic(); } else {//電影 getAllVideos(); initViewMovie(); } } //初始化電影 private void initViewMovie() { jzVideoPlayerStandard = findViewById(R.id.videoplayer); LinearLayoutManager gridLayoutManager = new LinearLayoutManager(this); movieTypeRl.setLayoutManager(gridLayoutManager); //具體 電影 GridLayoutManager gridLayoutManagers = new GridLayoutManager(MoviesActivity.this, 6); movieRv.setLayoutManager(gridLayoutManagers); // playMusicLl.setVisibility(View.GONE); } /** * 電視劇介面卡。、 */ public void initDianshiJv(final List<VideosBeans.MsgBodyBean.ListBean.VideosAllBean> videoPath, final String path){ GridLayoutManager gridLayoutManagers = new GridLayoutManager(MoviesActivity.this, 7); xqMovieJishuRc.setVisibility(View.VISIBLE); xqMovieJishuRc.setLayoutManager(gridLayoutManagers); mJiShuAdapter =new DianshiJvAdapter(videoPath,MoviesActivity.this); xqMovieJishuRc.setAdapter(mJiShuAdapter); } /** * 電影播放前。 */ public void initMovePlay(String path,String name,String img){ jzVideoPlayerStandard.setVisibility(View.VISIBLE); jzVideoPlayerStandard.setUp(path,JZVideoPlayerStandard.SCREEN_WINDOW_NORMAL, name); Glide.with(MoviesActivity.this) .load(img) .into(jzVideoPlayerStandard.thumbImageView); } @OnClick({R.id.back_ll, R.id.zuixin_tv, R.id.zuire_tv, R.id.haoping_tv, R.id.left_iv, R.id.right_iv, R.id.music_play_shang, R.id.music_play_stop, R.id.music_play_next}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.back_ll: if (movieXiangqingLl.getVisibility() == View.VISIBLE) {//不是顯示的。 t movieXiangqingLl.setVisibility(View.GONE); movieLl.setVisibility(View.VISIBLE); } else {//顯示的話。 finish(); } break; case R.id.zuixin_tv: break; case R.id.zuire_tv: break; case R.id.haoping_tv: break; case R.id.left_iv: if (pageNo == 1) { } else { pageNo--; getVideos(listVideoType.get(typeID).getId(), pageNo); } yeshu.setText(pageNo + ""); break; case R.id.right_iv: if (listVideos.size() == 0) { Toast.makeText(this, "沒有更多資料!", Toast.LENGTH_SHORT).show(); } else { pageNo++; getVideos(listVideoType.get(typeID).getId(), pageNo); yeshu.setText(pageNo + ""); } break; // case R.id.xq_play_tv: //立即播放按鈕 // break; case R.id.music_play_shang://上一首 previous(); break; case R.id.music_play_stop://暫停播放 play(); break; case R.id.music_play_next://下一首 next(); break; } } /** * 獲取電影型別 */ public void getAllVideos() { OkGo.<String>get(URL.getAllVideos) .tag(this) .execute(new StringCallback() { @Override public void onSuccess(Response<String> listType) { VideosTypeBean vyb = GsonUtils.GsonToBean(listType.body(), VideosTypeBean.class); listVideoType = vyb.getMsgBody(); Log.e("路徑--", listType.body() + URL.getAllVideos); Config.sVideoTypeBean = vyb; typeAdapter = new MovieTypeAdapter(listVideoType, MoviesActivity.this); movieTypeRl.setAdapter(typeAdapter); getVideos(listVideoType.get(0).getId(), pageNo);//預設查詢第一個 //型別 typeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, final int position) { pageNo = 1; typeID = position; getVideos(listVideoType.get(position).getId(), pageNo); yeshu.setText(pageNo + ""); //點選事件 } }); } }); } /** * 獲取型別下面的所有電影 * @param typeID 型別iD * @param pageNo 頁數 */ public void getVideos(int typeID, int pageNo) { Log.e("路徑--型別下所有電影", getVideos + typeID + "&pageNo=" + pageNo + "&pageSize=" + 12); OkGo.<String>get(getVideos + typeID + "&pageNo=" + pageNo + "&pageSize=" + 12) .tag(this) .execute(new StringCallback() { @Override public void onSuccess(Response<String> response) { VideosBeans videosBean = GsonUtils.GsonToBean(response.body(), VideosBeans.class); listVideos=videosBean.getMsgBody().getList(); if (listVideos.size() != 0) { moviesAdapter = new MoviesAdapter(listVideos, MoviesActivity.this); movieRv.setAdapter(moviesAdapter); //查詢型別下面的 moviesAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { //點選進入詳情頁 movieXiangqingLl.setVisibility(View.VISIBLE); movieLl.setVisibility(View.GONE); //設定詳情頁的資料。 setXiangQing(listVideos.get(position).getVoidprogramimg(), listVideos.get(position).getVoidprogramname(), listVideos.get(position).getVoidprogramdirector(), listVideos.get(position).getVoidprogramstarring(), listVideos.get(position).getFilmtype(), listVideos.get(position).getArea(), "242323", listVideos.get(position).getVoidprogramdescription()); //播放路徑。 listVideoJishu =listVideos.get(position).getVideos(); Log.e("o電視劇下面每一部 ",listVideoJishu.size()+"" ); //查詢是否是連續劇 int types =listVideos.get(position).getTypes();//1 。 if (types==0){//電視劇 initDianshiJv(listVideoJishu,listVideoJishu.get(position).getVoidpath()); initMovePlay(listVideoJishu.get(position).getVoidpath(), listVideos.get(position).getVoidprogramname(), listVideos.get(position).getVoidprogramimg() ); final String imgpath= listVideos.get(position).getVoidprogramimg(); mJiShuAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { //取出播放連結。跳轉到播放頁面 initMovePlay(listVideoJishu.get(position).getVoidpath(), listVideoJishu.get(position).getVoidname(), imgpath ); } }); }else{//電影 xqMovieJishuRc.setVisibility(View.GONE); String path=listVideoJishu.get(0).getVoidpath(); initMovePlay(path,listVideos.get(position).getVoidprogramname(), listVideos.get(position).getVoidprogramimg() ); } } }); } else { Toast.makeText(MoviesActivity.this, "沒有更多資料", Toast.LENGTH_SHORT).show(); } } }); } /** * 設定詳情 * * @param name * @param zhuyan * @param daoyan * @param type * @param addr * @param Num * @param jianjie */ public void setXiangQing(String path, String name, String zhuyan, String daoyan, String type, String addr, String Num, String jianjie) { Glide.with(MoviesActivity.this) .load(path) .into(xqMovieIv); xqMovieNameTv.setText(name); //名稱 xqMovieZhuyanTv.setText("主演:" + zhuyan); //主演 xqMovieDaoyanTv.setText("導演:" + daoyan); //導演 xqMovieTypeTv.setText("型別:" + type); //電影型別 xqMovieAddrTv.setText("製片國家:" + addr); //地址 xqMoviePaleyNumTv.setText("播放次數:" + Num); //播放次數 // xqMovieJishuRc;//每一集 xqMovieJianjieTv.setText(jianjie); // 介紹 } //初始化 音樂 private void initViewMusic() { LinearLayoutManager gridLayoutManager = new LinearLayoutManager(this); movieTypeRl.setLayoutManager(gridLayoutManager); GridLayoutManager gridLayoutManagers = new GridLayoutManager(MoviesActivity.this, 6); movieRv.setLayoutManager(gridLayoutManagers); LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) heiLl.getLayoutParams(); params.height = 590; heiLl.setLayoutParams(params); fanyeLl.setVisibility(View.GONE); playMusicLl.setVisibility(View.VISIBLE); mp = new MediaPlayer(); mp.setOnCompletionListener(this); mp.setOnErrorListener(this); } /** * 查詢 所有音樂 包括 型別下面的資料。 */ public void getAllMusic() { OkGo.<String>get(URL.getCategorySongs) .tag(this) .execute(new StringCallback() { @Override public void onSuccess(Response<String> listType) { MusicTypeBean mb = GsonUtils.GsonToBean(listType.body(), MusicTypeBean.class); mMusicTypes = mb.getMsgBody(); //型別介面卡 musicTypeAdapter = new MusicTypeAdapter(mMusicTypes, MoviesActivity.this); movieTypeRl.setAdapter(musicTypeAdapter); getAllSongs(mMusicTypes.get(0).getId(), songPageNo, 20); musicTypeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { getAllSongs(mMusicTypes.get(position).getId(), songPageNo, 20); //型別下面的音樂 } }); } }); } //&vodPartId=10&pageNo=2&pageSize=20 public void getAllSongs(int typeID, int songPageNo, int songSize) { // OkGo.<String>get(URL.getAllSongs+"&vodPartId"+typeID+"pageNo"+songPageNo+"pageSize"+songSize) OkGo.<String>get(URL.getAllSongs) .tag(this) .execute(new StringCallback() { @Override public void onSuccess(Response<String> response) { Log.e("onSuccess音樂: .", response.body()); MusicBean musicBean = GsonUtils.GsonToBean(response.body(), MusicBean.class); mSongs = musicBean.getMsgBody(); if (mSongs.size() == 0) { } else { musicAdapter = new MusicAdapter(mSongs, MoviesActivity.this); movieRv.setAdapter(musicAdapter); Log.e("onSuccess音樂: .", mSongs.get(0).getSongName()); musicAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { currIndexMusic = position;//當前音樂點選的索引 start(); Glide.with(MoviesActivity.this). load(mSongs.get(position).getLogo()) .into(musicPlayImg); } }); } } }); } @Override public void onCompletion(MediaPlayer mp) {//監聽播放完成。自動播放下一首。 if (mSongs.size() > 0) { next(); } else { Toast.makeText(this, "播放列表為空", Toast.LENGTH_SHORT).show(); } } @Override public boolean onError(MediaPlayer mp, int what, int extra) { mp.reset(); return false; } @Override protected void onDestroy() {//關閉音樂 if (mp != null) { flagMusic = false; try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } //釋放資源 mp.release(); // mp.stop(); // mp.pause(); if (mp != null) { mp = null; } } super.onDestroy(); } //上一首 private void previous() { if ((currIndexMusic - 1) >= 0) { currIndexMusic--; start(); } else { Toast.makeText(this, "當前已經是第一首歌曲了", Toast.LENGTH_SHORT).show(); } } //下一自首 private void next() { if (currIndexMusic + 1 < mSongs.size()) { currIndexMusic++; start(); } else { Toast.makeText(this, "當前已經是最後一首歌曲了", Toast.LENGTH_SHORT).show(); } } //開始播放 private void start() { if (mSongs.size() > 0 && currIndexMusic < mSongs.size()) { String SongPath = mSongs.get(currIndexMusic).getMusicFile(); mp.reset(); try { mp.setDataSource(SongPath); mp.prepare(); mp.start(); initSeekBar(); esaa.execute(this); currStateMusic = PAUSE; //中文 musicInfoTv .setText(mSongs.get(currIndexMusic).getSongName() + "-" + mSongs.get(currIndexMusic).getSinger()); musicPlayTimesTv.setText("/" + toTime(mp.getDuration()));//播放總時長 Glide.with(this) .load(R.drawable.ic_play) .into(musicPlayStop); } catch (IOException e) { e.printStackTrace(); } } else { Toast.makeText(this, "播放列表為空", Toast.LENGTH_SHORT).show(); } } //初始化SeekBar private void initSeekBar() { musicPlaySb.setMax(mp.getDuration()); musicPlaySb.setProgress(0); musicPlayTimeTv.setText(toTime(mp.getDuration())); musicPlaySb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { //是否由使用者改變 if (fromUser) { mp.seekTo(progress); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); } private String toTime(int time) { int minute = time / 1000 / 60; int s = time / 1000 % 60; String mm = null; String ss = null; if (minute < 10) mm = "0" + minute; else mm = minute + ""; if (s < 10) ss = "0" + s; else ss = "" + s; return mm + ":" + ss; } private void play() { switch (currStateMusic) { case IDLE: start(); currStateMusic = PAUSE; break; case PAUSE: mp.pause(); Glide.with(this) .load(R.drawable.ic_play_n) .into(musicPlayStop); currStateMusic = START; break; case START: mp.start(); Glide.with(this) .load(R.drawable.ic_play) .into(musicPlayStop); currStateMusic = PAUSE; } } private Handler hander = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case CURR_TIME_VALUE: //設定當前時間 musicPlayTimeTv.setText(msg.obj.toString()); break; default: break; } } }; public void run() { flagMusic = true; while (flagMusic) { if (null!=mp){ if (mp.getCurrentPosition() < musicPlaySb.getMax()) { musicPlaySb.setProgress(mp.getCurrentPosition()); Message msg = hander.obtainMessage(CURR_TIME_VALUE, toTime(mp.getCurrentPosition())); hander.sendMessage(msg); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } }else { flagMusic = false; } } } @Override public void onBackPressed() { if (JZVideoPlayer.backPress()) { return; } super.onBackPressed(); } @Override protected void onPause() { super.onPause(); JZVideoPlayer.releaseAllVideos(); } @Override public void onClick(View v) { } }

XML頁面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/ic_bg"
    android:orientation="vertical">
    <spa.nabo.com.nabospa.view.title
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </spa.nabo.com.nabospa.view.title>
        <include layout="@layout/back" />
    <LinearLayout
        android:id="@+id/movie_ll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:visibility="visible">
        <android.support.v7.widget.RecyclerView
            android:id="@+id/movie_type_rl"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="7">
        </android.support.v7.widget.RecyclerView>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:clipChildren="true"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:orientation="horizontal">

                <TextView
                    android:id="@+id/zuixin_tv"
                    android:layout_width="100dp"
                    android:layout_height="50dp"
                    android:clickable="true"
                    android:focusable="true"
                    android:gravity="center"
                    android:text="最新"
                    android:textColor="@drawable/movies_type_select_font_heibai"
                    android:textSize="18sp" />

                <TextView
                    android:id="@+id/zuire_tv"
                    android:layout_width="100dp"
                    android:layout_height="50dp"
                    android:layout_toRightOf="@id/zuixin_tv"
                    android:focusable="true"
                    android:gravity="center"
                    android:text="最熱"
                    android:textColor="@drawable/movies_type_select_font_heibai"
                    android:textSize="18sp" />

                <TextView
                    android:id="@+id/haoping_tv"
                    android:layout_width="100dp"
                    android:layout_height="50dp"
                    android:layout_toRightOf="@id/zuire_tv"
                    android:focusable="true"
                    android:gravity="center"
                    android:text="好評"
                    android:textColor="@drawable/movies_type_select_font_heibai"
                    android:textSize="18sp" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="50dp"
                    android:layout_alignParentRight="true"
                    android:layout_marginRight="50dp"
                    android:gravity="center"
                    android:orientation="horizontal"
                    android:paddingRight="20dp">

                    <TextView
                        android:layout_width="200dp"
                        android:layout_height="40dp"
                        android:background="@drawable/text_boder_bai"
                        android:drawableRight="@drawable/sousuo_ic"
                        android:gravity="center|left"
                        android:hint="搜尋"
                        android:padding="5dp"
                        android:textColorHint="@color/ziti_hint_font" />

                </LinearLayout>

            </RelativeLayout>

            <LinearLayout
                android:id="@+id/hei_ll"
                android:layout_width="match_parent"
                android:layout_height="510dp">

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/movie_rv"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    >

                </android.support.v7.widget.RecyclerView>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/fanye_ll"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:gravity="center"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/left_iv"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:focusable="true"
                    android:src="@drawable/left_select" />

                <TextView
                    android:id="@+id/yeshu"
                    android:layout_width="40dp"
                    android:layout_height="wrap_content"
                    android:gravity="center"
                    android:text="1"
                    android:textColor="@color/font_baise_color"
                    android:textSize="18sp" />

                <ImageView
                    android:id="@+id/right_iv"
                    android:layout_width="40dp"
                    android:layout_height="40dp"
                    android:focusable="true"
                    android:src="@drawable/right_select" />
            </LinearLayout>
            <!--播放控制元件-->
            <LinearLayout
                android:id="@+id/play_music_ll"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="bottom"
                android:gravity="bottom">

                <include
                    android:id="@+id/play_ll"
                    layout="@layout/music_play" />
            </LinearLayout>
        </LinearLayout>

    </LinearLayout>


    <RelativeLayout
        android:id="@+id/movie_xiangqing_ll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:padding="5dp"
        >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:orientation="vertical"
            android:id="@+id/linearLayout3">
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                
            
           

相關推薦

Android 頁面 音樂播放電影播放

1,音樂播放器 需求:很簡單能播放音樂 ,下一首上一首。就完事。還有個翻頁 按型別查詢。 2,電影播放器:能夠播放電影,快進,後退。這裡直接用的 框架。 由於比較簡單,就全部寫在一個頁面了。判斷資料型別。顯示不同的頁面。 下面是程式碼; import android.m

頁面中H5的使用標籤如音訊播放視訊播放

1.音訊播放器使用的標籤為: <audio src="音訊的地址" controls="controls" preload="auto" autoplay="autoplay" loop="loop"> 屬性中src 為音訊的地址路徑,loop 是迴圈播放,如

人狠話不多,細說大牛直播SDK之RTMP播放RTSP播放

 Windows/Android/iOS平臺高穩定、超低延遲的跨平臺RTMP直播播放器;  Windows/Android/iOS平臺高穩定、超低延遲的跨平臺RTSP直播播放器;  Windows/Android/iOS平臺完美支援多例項播放(如同時播放多路rtmp/rtsp流);  Windows/A

基於android的網路音樂播放-本地音樂的載入後臺播放(一)

作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網路音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也

22_Android中的本地音樂播放網路音樂播放的編寫,本地視訊播放網路視訊播放,照相機案例,偷拍案例實現

1 編寫以下案例:當點選了”播放”之後,在手機上的/mnt/sdcard2/natural.mp3就會播放。2 編寫佈局檔案activity_main.xml<LinearLayout xmlns

音樂播放——實現後臺播放、搖搖切歌等功能

前言 首先宣告,小白一隻,android完全自學,若程式碼中有不妥或更簡便的方法求指教(大佬帶帶我)。。。 APP 歡迎介面 主介面 音樂介面 實現功能 1.遍歷本地音樂 2.音樂後臺播放 3.音樂封面之黑礁唱

jqm視訊播放,html5視訊播放,html5音樂播放,html5播放,video開發demo,html5視訊播放示例,html5手機視訊播放

最近在論壇中看到了很多實用html5開發視訊播放,音樂播放的功能,大部分都在尋找答案。因此我就在這裡做一個demo,供大家相互學習。html5開發越來越流行了,而對於視訊這一塊也是必不可少的一部分。如何

Android MediaPlayer 播放網路音訊播放總結

        在近期的Android 系統MediapPalyer使用中,碰到了不少問題。其中一些問題也是在特殊的條件下才會出現,嘗試很多方法才解決。這裡做了總結,也跟大家分享一下: 1.播放器需要多執行緒實現         一般我們會把MediaPlayer放到Ser

Centos7安裝mplayer播放一些簡單開發環境的配置

最近整理電腦索性把重要的檔案備份了把window系統換成了Centos7Linux系統,由於很久沒有接觸Linux了,所以有點生疏 首先是製作Liunx啟動盤,這裡我使用的是UltraISO軟碟通這個軟體,具體可以參照UltraISO 製作Linux USB啟動盤 接下來

Android歡迎頁面自動跳轉觸控進入首頁

*注:純屬學習筆記 因為是剛入門的菜鳥,在理解歡迎介面跳轉到首頁的時候,比如三秒自動跳轉,或者點選直接進入,會出現一定的bug,比如溢位等,自己整理了下.***適合新手 第一:首先需要判斷的是WelcomeActivity接受到了觸控時間還是自動跳轉,定義一個跳轉到Ma

51CTO學院PC播放倍速播放內測

pc端 播放器 倍速播放 pc端播放器倍速播放好消息!好消息!好消息!好消息!好消息!好消息!好消息!好消息!好消息!好消息!好消息!一直盼望!十分想念!百日研發!千呼萬喚!萬眾矚目!的PC端播放器倍速播放功能已經於17年9月13日開啟了內測,我們邀請了200多位小夥伴的參與了內測,感謝大家提供的各種建議和b

VS2008下VLC播放,實現播放、暫停、停止、快進、截圖、進度條顯示、進度條控制功能

可以直接使用的原始碼:http://download.csdn.net/detail/dafenqie/9792806 1、首先建立一個基於對話方塊的應用程式; 2、建立完成後,把VLC的標頭檔案目錄vlc拷貝到工程目錄下,拷貝libvlc.dll、libvlccore.d

EasyRTMP之rtmp流flash播放無法正常播放問題解決(二)

問題簡介 EasyRTMP是EasyDarwin團隊開發的一套簡單易用的RTMP推送SDK。本文想講述下開發過程中遇到的一個問題。問題的現象是使用EasyRTMP推送音視訊流到自己搭建的ngin

一步步自定義視訊播放——使用SurfaceView播放視訊

Surface Surface與SurfaceView這篇文章對Surface和SurfaceView做了很詳細的解釋。 簡單的說Surface對應了一塊螢幕緩衝區,每個window對應一個Surface,任何View都要畫在Surface的Canvas上。

java調用本地播放播放視頻文件。調用本地播放不能播放指定文件的說明。

pro pen https 安裝路徑 java 一個 code strong 全路徑 public class OpenExe extends HttpServlet { //打開本地播放器並播放視頻 public static vo

Android 音視頻深入 十三 OpenSL ES 制作音樂播放,能暫停調整音量(附源碼下載)

音視頻 OpenSL ES 項目地址https://github.com/979451341/OpenSLAudio OpenSL ES 是基於NDK也就是c語言的底層開發音頻的公開API,通過使用它能夠做到標準化, 高性能,低響應時間的音頻功能實現方法。 這次是使用OpenSL ES來做一個音樂播

[Android]結合MediaPlayerService的音樂播放

通過參照網上其他人的MP3播放器,自己也在這些基礎上小試牛刀,製作的了一個MP3的播放器,先上個介面先: 接下來就上程式碼: 首先是.mp3格式的音樂檔案的過濾類單獨在一個java檔案中: package com.example.mediaplayer; import

[報告原始碼分享] 基於AndroidSQLite資料庫的手機音樂播放

本文就Android系統上一款音樂播放器應用程式的設計與實現進行討論。Android是一個開源的系統,它底層是基於Linux的作業系統,本論文的音樂播放器採用了Android開源系統技術,利用Java語言和Eclipse編輯工具對播放器進行編寫。同時給出了詳細的系統設計過程、部分介面圖及主要功能執行

基於android的網路音樂播放-網路音樂的搜尋展示(五)

作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網路音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也

從一個音樂播放來了解android的Service元件BroadcastReceiver

從一個音樂播放器來理解android的Service元件和BroadcastReceiver 前言:很久以前寫過一個音樂播放器,採用Service元件實現後臺播放,BroadcastReceiver實現訊息傳遞。播放器原始碼在此:簡陋音樂播放器。 Music