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]結合MediaPlayer和Service的音樂播放器
通過參照網上其他人的MP3播放器,自己也在這些基礎上小試牛刀,製作的了一個MP3的播放器,先上個介面先:
接下來就上程式碼:
首先是.mp3格式的音樂檔案的過濾類單獨在一個java檔案中:
package com.example.mediaplayer;
import
[報告和原始碼分享] 基於Android和SQLite資料庫的手機音樂播放器
本文就Android系統上一款音樂播放器應用程式的設計與實現進行討論。Android是一個開源的系統,它底層是基於Linux的作業系統,本論文的音樂播放器採用了Android開源系統技術,利用Java語言和Eclipse編輯工具對播放器進行編寫。同時給出了詳細的系統設計過程、部分介面圖及主要功能執行
基於android的網路音樂播放器-網路音樂的搜尋和展示(五)
作為android初學者,最近把瘋狂android講義和瘋狂Java講義看了一遍,看到書中介紹的知識點非常多,很難全部記住,為了更好的掌握基礎知識點,我將開發一個網路音樂播放器-EasyMusic來鞏固下,也當作是練練手。感興趣的朋友可以看看,有設計不足的地方也
從一個音樂播放器來了解android的Service元件和BroadcastReceiver
從一個音樂播放器來理解android的Service元件和BroadcastReceiver
前言:很久以前寫過一個音樂播放器,採用Service元件實現後臺播放,BroadcastReceiver實現訊息傳遞。播放器原始碼在此:簡陋音樂播放器。
Music