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 listVideoType;//电影类型
private MovieTypeAdapter typeAdapter;//类型 适配器
private MoviesAdapter moviesAdapter;//电影适配器
private VideosBeans.MsgBodyBean.ListBean.VideosAllBean videoPaths;//电影播放路径。
private List listVideoJishu;//电影播放路径。
private List listVideos;//电影信息
public static int pageNo = 1;//电影页数
public static int typeID;//电影类型ID
private DianshiJvAdapter mJiShuAdapter;//电视剧 集数 适配器。
private int movieOrMusicType = 1;//默认 进来是电影,1 音乐是0
private List mMusicTypes;// 音乐类型
private List 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 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.get(URL.getAllVideos)
.tag(this)
.execute(new StringCallback() {
@Override
public void onSuccess(Response 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.get(getVideos + typeID + "&pageNo=" + pageNo + "&pageSize=" + 12)
.tag(this)
.execute(new StringCallback() {
@Override
public void onSuccess(Response 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.get(URL.getCategorySongs)
.tag(this)
.execute(new StringCallback() {
@Override
public void onSuccess(Response 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.get(URL.getAllSongs+"&vodPartId"+typeID+"pageNo"+songPageNo+"pageSize"+songSize)
OkGo.get(URL.getAllSongs)
.tag(this)
.execute(new StringCallback() {
@Override
public void onSuccess(Response 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页面
<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:orientation="horizontal">
<ImageView
android:id="@+id/xq_movie_iv"
android:layout_width="220dp"
android:layout_height="270dp"
android:src="@color/font_baise_color" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:orientation="vertical">
<TextView
android:id="@+id/xq_movie_name_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="24小时:末日重生 24Hours To Live(2017)"
android:textColor="@color/ziti_font"
android:textSize="18sp" />
<TextView
android:id="@+id/xq_movie_zhuyan_tv"
android:layout_width="350dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:ellipsize="end"
android:lineSpacingExtra="10dp"
android:maxLines="2"
android:text="主演: 泰伊·谢里丹 / 奥利维亚·库克 / 本·门德尔森 / 马克·里朗斯 / 丽娜·维特 / 森崎温 / 赵家正 / 西蒙·佩吉 / T·J·米勒 / 汉娜·乔恩-卡门 / 拉尔夫·尹爱森 / 苏珊·林奇 / 克莱尔·希金斯 / 劳伦斯·斯佩尔曼 / 佩蒂塔·维克斯 / 艾萨克·安德鲁斯"
android:textColor="@color/ziti_font"
android:textSize="18sp" />
<TextView
android:id="@+id/xq_movie_daoyan_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="导演: 史蒂文·斯皮尔伯"
android:textColor="@color/ziti_font"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:id="@+id/xq_movie_type_tv"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="类型: 动作 / 科幻 / 冒险"
android:textColor="@color/ziti_font"
android:textSize="18sp" />
<TextView
android:id="@+id/xq_movie_addr_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="制片国家/地区: 美国"
android:textColor="@color/ziti_font"
android:textSize="18sp" />
<TextView
android:id="@+id/xq_movie_paleyNum_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="播放次数:3892次"
android:textColor="@color/ziti_font"
android:textSize="18sp" />
LinearLayout>
LinearLayout>
<TextView
android:layout_marginTop="30dp"
android:id="@+id/xq_movie_jianjie_tv"
android:layout_width="595dp"
android:layout_height="wrap_content"
android:ellipsize="end"
android:lineSpacingExtra="10dp"
android:maxLines="3"
android:text="在2045年,现实世界衰退破败,人们沉迷于VR(虚拟现实)游戏“绿洲(OASIS)”的虚幻世界里寻求慰藉。马克·里朗斯饰演的“绿洲”的创始人临终前宣布,将亿万身家全部留给寻获他隐藏的彩蛋的游戏玩家,史上最大规模的寻宝冒险就此展开,由泰伊·谢里丹饰演的男主角韦德·沃兹(Wade Watts/Parzival)和数十亿竞争者踏上奇妙而又危机重重的旅途。"
android:textColor="@color/ziti_font"
android:textSize="18sp"
/>
LinearLayout>
<LinearLayout
android:layout_toRightOf="@+id/linearLayout3"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_height="wrap_content">
<cn.jzvd.JZVideoPlayerStandard
android:focusable="true"
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="300dp"/>
<android.support.v7.widget.RecyclerView
android:visibility="gone"
android:id="@+id/xq_movie_jishu_rc"
android:layout_width="match_parent"
android:layout_height="250dp">
android.support.v7.widget.RecyclerView>
LinearLayout>
RelativeLayout>
LinearLayout>
期待大神们的指点。
简单做个笔记。方便自己方便他人