
由于这个模块内容较多,分为上、中、下 三篇博客分别来讲述,请耐心阅读。
课程模块分为四个部分
- [ ] 课程列表
- [ ] 课程详情
- [x] 视频播放
- [x] 播放记录
课程模块(下)主要讲述视频播放和播放记录两个部分
一、视频播放
1、视频播放界面
(1)、创建视频播放界面
在com.boxuegu.activity包中创建一个Java类,命名为VideoPlayActivity。在res/layout文件夹下创建布局文件,命名为activity_video_play。
(2)、界面代码——activity_video_play.xml
1<?xml version="1.0" encoding="utf-8"?> 2<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent"> 5 <VideoView 6 android:id="@+id/videoView" 7 android:layout_width="fill_parent" 8 android:layout_height="fill_parent" /> 9 10</RelativeLayout>
2、视频播放界面逻辑代码
(1)、在res文件夹下创建raw文件夹。用来存放视频。放入测试视频video11.mp4。
(2)。逻辑代码——VideoPlayActivity.java
1package com.boxuegu.activity; 2 3import android.content.Intent; 4import android.content.pm.ActivityInfo; 5import android.os.Bundle; 6import android.support.v7.app.AppCompatActivity; 7import android.text.TextUtils; 8import android.view.KeyEvent; 9import android.view.WindowManager; 10import android.widget.MediaController; 11import android.widget.Toast; 12import android.widget.VideoView; 13import com.boxuegu.R; 14 15public class VideoPlayActivity extends AppCompatActivity { 16 17 private MediaController controller; 18 private VideoView videoView; 19 private String videoPath; 20 private int position; 21 private String url; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_video_play); 27 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 28 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 29 videoPath = getIntent().getStringExtra("videoPath"); 30 position = getIntent().getIntExtra("position",0); 31 init(); 32 33 } 34 35 private void init(){ 36 videoView = (VideoView)findViewById(R.id.videoView); 37 controller = new MediaController(this); 38 videoView.setMediaController(controller); 39 play(); 40 } 41 private void play(){ 42 if (TextUtils.isEmpty(videoPath)){ 43 Toast.makeText(this,"本地没有视频,暂时无法播放",Toast.LENGTH_SHORT).show(); 44 return; 45 } 46 47 String uri = "android.resource://" + getPackageName() + "/" + R.raw.video11; 48 videoView.setVideoPath(uri); 49 videoView.start(); 50 51 } 52 53 @Override 54 public boolean onKeyDown(int keyCode, KeyEvent event){ 55 //把视频详情界面传过来的被点击视频的位置传递回去 56 Intent data = new Intent(); 57 data.putExtra("position",position); 58 setResult(RESULT_OK,data); 59 return super.onKeyDown(keyCode,event); 60 61 } 62}
3、修改界面代码
(1)、找到VideoListActivity.java文件,在注释//跳转到视频播放界面下方添加如下代码:
1Intent intent=new Intent(VideoListActivity.this,VideoPlayActivity.class); 2intent.putExtra("videoPath",videoPath); 3intent.putExtra("position",position); 4startActivityForResult(intent,1);
(1)、找到VideoListActivity.java文件,添加以下方法:
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3 super.onActivityResult(requestCode, resultCode, data); 4 if (data!=null){ 5 // 6 int position = data.getIntExtra("position",0); 7 adapter.setSelectedPosition(position); 8 // 9 lv_video_list.setVisibility(View.VISIBLE); 10 sv_chapter_intro.setVisibility(View.GONE); 11 tv_intro.setBackgroundColor(Color.parseColor("#FFFFFF")); 12 tv_video.setBackgroundColor(Color.parseColor("#30B4FF")); 13 tv_intro.setTextColor(Color.parseColor("#000000")); 14 tv_video.setTextColor(Color.parseColor("#FFFFFF")); 15 } 16 }
二、播放记录
1、播放记录界面
(1)、创建播放记录界面
在com.boxuegu.activity包中创建一个Java类,命名为PlayHistoryActivity,创建布局文件activity_play_history。导入所需界面图片 video_play_icon1.png、video_play_icon2.png、video_play_icon3.png、video_play_icon4.png、video_play_icon5.png、video_play_icon6.png、video_play_icon7.png、video_play_icon8.png、video_play_icon9.png、video_play_icon10.png。
(2)界面代码——activity_play_history.xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:background="@android:color/white"> 7 <include layout="@layout/main_title_bar"/> 8 <RelativeLayout 9 android:layout_width="fill_parent" 10 android:layout_height="fill_parent"> 11 <ListView 12 android:id="@+id/lv_list" 13 android:layout_width="fill_parent" 14 android:layout_height="fill_parent" 15 android:divider="#E4E4E4" 16 android:dividerHeight="1dp" 17 android:scrollbars="none"/> 18 <TextView 19 android:id="@+id/tv_none" 20 android:layout_width="fill_parent" 21 android:layout_height="fill_parent" 22 android:gravity="center" 23 android:text="暂无播放记录" 24 android:textColor="@android:color/darker_gray" 25 android:textSize="16sp" 26 android:visibility="gone"/> 27 </RelativeLayout> 28</LinearLayout>
2、播放记录界面Item
(1)、创建播放记录界面Item,在res/layout文件夹下创建一个布局文件,命名为play_history_list_item。
(2)、界面代码play_history_list_item.xml
1<?xml version="1.0" encoding="utf-8"?> 2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="horizontal" 4 android:layout_width="match_parent" 5 android:layout_height="wrap_content" 6 android:background="@android:color/white" 7 android:gravity="center_vertical" 8 android:padding="10dp"> 9 <RelativeLayout 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content"> 12 <ImageView 13 android:id="@+id/iv_video_icon" 14 android:layout_width="100dp" 15 android:layout_height="75dp" 16 android:src="@drawable/video_play_icon2"/> 17 <ImageView 18 android:src="@android:drawable/ic_media_play" 19 android:layout_width="30dp" 20 android:layout_height="30dp" 21 android:layout_centerInParent="true"/> 22 </RelativeLayout> 23 <LinearLayout 24 android:layout_width="fill_parent" 25 android:layout_height="wrap_content" 26 android:orientation="vertical" 27 android:layout_marginLeft="15dp" 28 android:layout_gravity="center_vertical"> 29 <TextView 30 android:id="@+id/tv_adapter_title" 31 android:layout_width="wrap_content" 32 android:layout_height="fill_parent" 33 android:textSize="16sp" 34 android:textColor="#333333" 35 android:gravity="center_vertical"/> 36 <TextView 37 android:layout_marginTop="4dp" 38 android:id="@+id/tv_video_title" 39 android:layout_width="wrap_content" 40 android:layout_height="fill_parent" 41 android:textSize="12sp" 42 android:textColor="#a3a3a3" 43 android:gravity="center_vertical"/> 44 </LinearLayout> 45</LinearLayout>
3、播放记录界面Adapter
在com.boxuegu.adapter包下创建一个Java类,命名为PlayHistoryAdapter。代码如下:
1package com.boxuegu.adapter; 2 3import android.content.Context; 4import android.content.Intent; 5import android.view.LayoutInflater; 6import android.view.View; 7import android.view.ViewGroup; 8import android.widget.BaseAdapter; 9import android.widget.ImageView; 10import android.widget.TextView; 11import java.util.List; 12import com.boxuegu.R; 13import com.boxuegu.activity.VideoPlayActivity; 14import com.boxuegu.bean.VideoBean; 15 16//播放历史 17public class PlayHistoryAdapter extends BaseAdapter { 18 private Context mContext; 19 private List<VideoBean> vbl; 20 public PlayHistoryAdapter(Context context){ 21 this.mContext = context; 22 } 23 24 public void setData(List<VideoBean> vbl){ 25 this.vbl = vbl; 26 notifyDataSetChanged(); 27 } 28 29 @Override 30 public int getCount() { 31 return vbl == null ? 0 : vbl.size(); 32 } 33 34 @Override 35 public VideoBean getItem(int i) { 36 return vbl == null ? null : vbl.get(i); 37 } 38 39 @Override 40 public long getItemId(int i) { 41 return i; 42 } 43 44 @Override 45 public View getView(final int i, View view, ViewGroup viewGroup) { 46 final ViewHolder vh; 47 if (view == null){ 48 vh = new ViewHolder(); 49 view = LayoutInflater.from(mContext).inflate( 50 R.layout.play_history_list_item,null 51 ); 52 vh.tv_title = (TextView) view.findViewById(R.id.tv_adapter_title); 53 vh.tv_video_title = (TextView) view.findViewById(R.id.tv_video_title); 54 vh.iv_icon = (ImageView) view.findViewById(R.id.iv_video_icon); 55 view.setTag(vh); 56 }else{ 57 vh = (ViewHolder) view.getTag(); 58 } 59 final VideoBean bean = getItem(i); 60 if (bean!=null){ 61 vh.tv_title.setText(bean.title); 62 vh.tv_video_title.setText(bean.secondTitle); 63 switch (bean.chapterId){ 64 case 1: 65 vh.iv_icon.setImageResource(R.drawable.video_play_icon1); 66 break; 67 case 2: 68 vh.iv_icon.setImageResource(R.drawable.video_play_icon2); 69 break; 70 case 3: 71 vh.iv_icon.setImageResource(R.drawable.video_play_icon3); 72 break; 73 case 4: 74 vh.iv_icon.setImageResource(R.drawable.video_play_icon4); 75 break; 76 case 5: 77 vh.iv_icon.setImageResource(R.drawable.video_play_icon5); 78 break; 79 case 6: 80 vh.iv_icon.setImageResource(R.drawable.video_play_icon6); 81 break; 82 case 7: 83 vh.iv_icon.setImageResource(R.drawable.video_play_icon7); 84 break; 85 case 8: 86 vh.iv_icon.setImageResource(R.drawable.video_play_icon8); 87 break; 88 case 9: 89 vh.iv_icon.setImageResource(R.drawable.video_play_icon9); 90 break; 91 case 10: 92 vh.iv_icon.setImageResource(R.drawable.video_play_icon10); 93 break; 94 default: 95 vh.iv_icon.setImageResource(R.drawable.video_play_icon1); 96 break; 97 } 98 } 99 view.setOnClickListener(new View.OnClickListener() { 100 @Override 101 public void onClick(View view) { 102 if (bean==null) return; 103 Intent intent = new Intent(mContext, VideoPlayActivity.class); 104 intent.putExtra("videoPath",bean.videoPath); 105 mContext.startActivity(intent); 106 } 107 }); 108 return view; 109 } 110 class ViewHolder{ 111 public TextView tv_title,tv_video_title; 112 public ImageView iv_icon; 113 114 } 115}
4、播放记录界面逻辑代码——PlayHistoryActivity.java
1package com.boxuegu.activity; 2 3import android.content.pm.ActivityInfo; 4import com.boxuegu.R; 5import com.boxuegu.adapter.PlayHistoryAdapter; 6import com.boxuegu.bean.VideoBean; 7import com.boxuegu.utils.AnalysisUtils; 8import com.boxuegu.utils.DBUtils; 9import android.graphics.Color; 10import android.os.Bundle; 11import android.support.v7.app.AppCompatActivity; 12import android.view.View; 13import android.widget.ListView; 14import android.widget.RelativeLayout; 15import android.widget.TextView; 16 17import java.util.ArrayList; 18import java.util.List; 19 20 21public class PlayHistoryActivity extends AppCompatActivity { 22 private TextView tv_main_title, tv_back, tv_none; 23 private RelativeLayout rl_title_bar; 24 private ListView lv_list; 25 private PlayHistoryAdapter adapter; 26 private List<VideoBean> vbl; 27 private DBUtils db; 28 @Override 29 protected void onCreate(Bundle savedInstanceState) { 30 super.onCreate(savedInstanceState); 31 setContentView(R.layout.activity_play_history); 32 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 33 db=DBUtils.getInstance(this); 34 vbl=new ArrayList<VideoBean>(); 35 vbl=db.getVideoHistory(AnalysisUtils.readLoginUserName(this)); 36 init(); 37 } 38 39 private void init(){ 40 tv_main_title = (TextView) findViewById(R.id.tv_main_title); 41 tv_main_title.setText("播放记录"); 42 rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar); 43 rl_title_bar.setBackgroundColor(Color.parseColor("#30B4ff")); 44 tv_back = (TextView) findViewById(R.id.tv_back); 45 lv_list = (ListView) findViewById(R.id.lv_list); 46 tv_none = (TextView) findViewById(R.id.tv_none); 47 if (vbl.size()==0){ 48 tv_none.setVisibility(View.VISIBLE); 49 } 50 adapter=new PlayHistoryAdapter(this); 51 adapter.setData(vbl); 52 lv_list.setAdapter(adapter); 53 tv_back.setOnClickListener(new View.OnClickListener() { 54 @Override 55 public void onClick(View v) { 56 PlayHistoryActivity.this.finish(); 57 PlayHistoryActivity.this.finish(); 58 } 59 }); 60 } 61}
5、修改界面代码
(1)、找到DBUtils.java,添加如下代码:
1public ArrayList<VideoBean> getVideoHistory(String userName){ 2 String sql="SELECT * FROM " + SQLiteHelper.U_VIDEO_PLAY_LIST + " WHERE userName = ?"; 3 Cursor cursor = db.rawQuery(sql,new String[]{userName}); 4 ArrayList<VideoBean> vbl = new ArrayList<VideoBean >(); 5 VideoBean bean = null; 6 while (cursor.moveToNext()){ 7 bean = new VideoBean(); 8 bean.chapterId = cursor.getInt(cursor.getColumnIndex("chapterId")); 9 bean.videoId = cursor.getInt(cursor.getColumnIndex("videoId")); 10 bean.videoPath = cursor.getString(cursor.getColumnIndex("videoPath")); 11 bean.title = cursor.getString(cursor.getColumnIndex("title")); 12 bean.secondTitle = cursor.getString(cursor.getColumnIndex("secondTitle")); 13 vbl.add(bean); 14 bean = null; 15 16 } 17 cursor.close(); 18 return vbl; 19 }
(2)、找到MyInfoView.java文件,在注释//跳转到播放记录界面下方添加如下代码:
1Intent intent = new Intent(mContext, PlayHistoryActivity.class); 2mContext.startActivity(intent);
三、运行效果

现在这个项目的基本功能都已经完成。看着自己有道云笔记里面的文章,满满的成就感。按照项目综述,后面还会有创新点和打包上线的模块。由于这个项目也是移动高级开发的期末项目。所以创新点暂时不更新。期末作品上交以后会公开创新模块(7月中旬才会更新)。敬请期待!


