Android项目实战系列—基于博学谷(七)课程模块(下)
由于这个模块内容较多,分为上、中、下 三篇博客分别来讲述,请耐心阅读。
课程模块分为四个部分
- 课程列表
- 课程详情
- 视频播放
- 播放记录
课程模块(下)主要讲述视频播放和播放记录两个部分
一、视频播放
1、视频播放界面
(1)、创建视频播放界面
在com.boxuegu.activity
包中创建一个Java类,命名为VideoPlayActivity
。在res/layout
文件夹下创建布局文件,命名为activity_video_play
。
(2)、界面代码——activity_video_play.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><VideoViewandroid:id="@+id/videoView"android:layout_width="fill_parent"android:layout_height="fill_parent" /></RelativeLayout>
2、视频播放界面逻辑代码
(1)、在res文件夹下创建raw
文件夹。用来存放视频。放入测试视频video11.mp4
。
(2)。逻辑代码——VideoPlayActivity.java
package com.boxuegu.activity;import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.WindowManager;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
import com.boxuegu.R;public class VideoPlayActivity extends AppCompatActivity {private MediaController controller;private VideoView videoView;private String videoPath;private int position;private String url;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_video_play);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);videoPath = getIntent().getStringExtra("videoPath");position = getIntent().getIntExtra("position",0);init();}private void init(){videoView = (VideoView)findViewById(R.id.videoView);controller = new MediaController(this);videoView.setMediaController(controller);play();}private void play(){if (TextUtils.isEmpty(videoPath)){Toast.makeText(this,"本地没有视频,暂时无法播放",Toast.LENGTH_SHORT).show();return;}String uri = "android.resource://" + getPackageName() + "/" + R.raw.video11;videoView.setVideoPath(uri);videoView.start();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event){//把视频详情界面传过来的被点击视频的位置传递回去Intent data = new Intent();data.putExtra("position",position);setResult(RESULT_OK,data);return super.onKeyDown(keyCode,event);}
}
3、修改界面代码
(1)、找到VideoListActivity.java文件,在注释//跳转到视频播放界面
下方添加如下代码:
Intent intent=new Intent(VideoListActivity.this,VideoPlayActivity.class);
intent.putExtra("videoPath",videoPath);
intent.putExtra("position",position);
startActivityForResult(intent,1);
(1)、找到VideoListActivity.java
文件,添加以下方法:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (data!=null){//int position = data.getIntExtra("position",0);adapter.setSelectedPosition(position);//lv_video_list.setVisibility(View.VISIBLE);sv_chapter_intro.setVisibility(View.GONE);tv_intro.setBackgroundColor(Color.parseColor("#FFFFFF"));tv_video.setBackgroundColor(Color.parseColor("#30B4FF"));tv_intro.setTextColor(Color.parseColor("#000000"));tv_video.setTextColor(Color.parseColor("#FFFFFF"));}}
二、播放记录
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/white"><include layout="@layout/main_title_bar"/><RelativeLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"><ListViewandroid:id="@+id/lv_list"android:layout_width="fill_parent"android:layout_height="fill_parent"android:divider="#E4E4E4"android:dividerHeight="1dp"android:scrollbars="none"/><TextViewandroid:id="@+id/tv_none"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"android:text="暂无播放记录"android:textColor="@android:color/darker_gray"android:textSize="16sp"android:visibility="gone"/></RelativeLayout>
</LinearLayout>
2、播放记录界面Item
(1)、创建播放记录界面Item,在res/layout
文件夹下创建一个布局文件,命名为play_history_list_item
。
(2)、界面代码play_history_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@android:color/white"android:gravity="center_vertical"android:padding="10dp"><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/iv_video_icon"android:layout_width="100dp"android:layout_height="75dp"android:src="@drawable/video_play_icon2"/><ImageViewandroid:src="@android:drawable/ic_media_play"android:layout_width="30dp"android:layout_height="30dp"android:layout_centerInParent="true"/></RelativeLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"android:layout_marginLeft="15dp"android:layout_gravity="center_vertical"><TextViewandroid:id="@+id/tv_adapter_title"android:layout_width="wrap_content"android:layout_height="fill_parent"android:textSize="16sp"android:textColor="#333333"android:gravity="center_vertical"/><TextViewandroid:layout_marginTop="4dp"android:id="@+id/tv_video_title"android:layout_width="wrap_content"android:layout_height="fill_parent"android:textSize="12sp"android:textColor="#a3a3a3"android:gravity="center_vertical"/></LinearLayout>
</LinearLayout>
3、播放记录界面Adapter
在com.boxuegu.adapter
包下创建一个Java类,命名为PlayHistoryAdapter
。代码如下:
package com.boxuegu.adapter;import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import com.boxuegu.R;
import com.boxuegu.activity.VideoPlayActivity;
import com.boxuegu.bean.VideoBean;//播放历史
public class PlayHistoryAdapter extends BaseAdapter {private Context mContext;private List<VideoBean> vbl;public PlayHistoryAdapter(Context context){this.mContext = context;}public void setData(List<VideoBean> vbl){this.vbl = vbl;notifyDataSetChanged();}@Overridepublic int getCount() {return vbl == null ? 0 : vbl.size();}@Overridepublic VideoBean getItem(int i) {return vbl == null ? null : vbl.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(final int i, View view, ViewGroup viewGroup) {final ViewHolder vh;if (view == null){vh = new ViewHolder();view = LayoutInflater.from(mContext).inflate(R.layout.play_history_list_item,null);vh.tv_title = (TextView) view.findViewById(R.id.tv_adapter_title);vh.tv_video_title = (TextView) view.findViewById(R.id.tv_video_title);vh.iv_icon = (ImageView) view.findViewById(R.id.iv_video_icon);view.setTag(vh);}else{vh = (ViewHolder) view.getTag();}final VideoBean bean = getItem(i);if (bean!=null){vh.tv_title.setText(bean.title);vh.tv_video_title.setText(bean.secondTitle);switch (bean.chapterId){case 1:vh.iv_icon.setImageResource(R.drawable.video_play_icon1);break;case 2:vh.iv_icon.setImageResource(R.drawable.video_play_icon2);break;case 3:vh.iv_icon.setImageResource(R.drawable.video_play_icon3);break;case 4:vh.iv_icon.setImageResource(R.drawable.video_play_icon4);break;case 5:vh.iv_icon.setImageResource(R.drawable.video_play_icon5);break;case 6:vh.iv_icon.setImageResource(R.drawable.video_play_icon6);break;case 7:vh.iv_icon.setImageResource(R.drawable.video_play_icon7);break;case 8:vh.iv_icon.setImageResource(R.drawable.video_play_icon8);break;case 9:vh.iv_icon.setImageResource(R.drawable.video_play_icon9);break;case 10:vh.iv_icon.setImageResource(R.drawable.video_play_icon10);break;default:vh.iv_icon.setImageResource(R.drawable.video_play_icon1);break;}}view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (bean==null) return;Intent intent = new Intent(mContext, VideoPlayActivity.class);intent.putExtra("videoPath",bean.videoPath);mContext.startActivity(intent);}});return view;}class ViewHolder{public TextView tv_title,tv_video_title;public ImageView iv_icon;}
}
4、播放记录界面逻辑代码——PlayHistoryActivity.java
package com.boxuegu.activity;import android.content.pm.ActivityInfo;
import com.boxuegu.R;
import com.boxuegu.adapter.PlayHistoryAdapter;
import com.boxuegu.bean.VideoBean;
import com.boxuegu.utils.AnalysisUtils;
import com.boxuegu.utils.DBUtils;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class PlayHistoryActivity extends AppCompatActivity {private TextView tv_main_title, tv_back, tv_none;private RelativeLayout rl_title_bar;private ListView lv_list;private PlayHistoryAdapter adapter;private List<VideoBean> vbl;private DBUtils db;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_play_history);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);db=DBUtils.getInstance(this);vbl=new ArrayList<VideoBean>();vbl=db.getVideoHistory(AnalysisUtils.readLoginUserName(this));init();}private void init(){tv_main_title = (TextView) findViewById(R.id.tv_main_title);tv_main_title.setText("播放记录");rl_title_bar = (RelativeLayout) findViewById(R.id.title_bar);rl_title_bar.setBackgroundColor(Color.parseColor("#30B4ff"));tv_back = (TextView) findViewById(R.id.tv_back);lv_list = (ListView) findViewById(R.id.lv_list);tv_none = (TextView) findViewById(R.id.tv_none);if (vbl.size()==0){tv_none.setVisibility(View.VISIBLE);}adapter=new PlayHistoryAdapter(this);adapter.setData(vbl);lv_list.setAdapter(adapter);tv_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {PlayHistoryActivity.this.finish();PlayHistoryActivity.this.finish();}});}
}
5、修改界面代码
(1)、找到DBUtils.java,添加如下代码:
public ArrayList<VideoBean> getVideoHistory(String userName){String sql="SELECT * FROM " + SQLiteHelper.U_VIDEO_PLAY_LIST + " WHERE userName = ?";Cursor cursor = db.rawQuery(sql,new String[]{userName});ArrayList<VideoBean> vbl = new ArrayList<VideoBean >();VideoBean bean = null;while (cursor.moveToNext()){bean = new VideoBean();bean.chapterId = cursor.getInt(cursor.getColumnIndex("chapterId"));bean.videoId = cursor.getInt(cursor.getColumnIndex("videoId"));bean.videoPath = cursor.getString(cursor.getColumnIndex("videoPath"));bean.title = cursor.getString(cursor.getColumnIndex("title"));bean.secondTitle = cursor.getString(cursor.getColumnIndex("secondTitle"));vbl.add(bean);bean = null;}cursor.close();return vbl;}
(2)、找到MyInfoView.java
文件,在注释//跳转到播放记录界面
下方添加如下代码:
Intent intent = new Intent(mContext, PlayHistoryActivity.class);
mContext.startActivity(intent);
现在这个项目的基本功能都已经完成。看着自己有道云笔记里面的文章,满满的成就感
。按照项目综述,后面还会有创新点
和打包上线
的模块。由于这个项目也是移动高级开发
的期末项目。所以创新点暂时不更新
。期末作品上交以后会公开创新模块(7月中旬才会更新)。敬请期待!
Android项目实战系列—基于博学谷 开源地址
Android项目实战系列—基于博学谷(七)课程模块(下)相关推荐
- Android项目实战系列—基于博学谷(七)课程模块(上)
由于这个模块内容较多,分为上.中.下 三篇博客分别来讲述,请耐心阅读. 课程模块分为四个部分 课程列表 课程详情 视频播放 播放记录 课程模块(上)主要讲述课程列表部分 一.水平滑动广告栏界面 1.创 ...
- android项目实战博学谷百度云,Android项目实战系列—基于博学谷(七)课程模块(下)...
由于这个模块内容较多,分为上.中.下 三篇博客分别来讲述,请耐心阅读. 课程模块分为四个部分 [ ] [课程列表]() [ ] [课程详情]() [x] [视频播放]() [x] [播放记录]() 课 ...
- android中私有方法 继承,Android项目实战系列—基于博学谷(五)个人资料
由于这个模块内容较多,篇幅较长,请耐心阅读. 个人资料模块分为两个部分 [x] [个人资料]() [x] [资料修改]() 一.个人资料 1.个人资料界面 (1).创建个人资料界面 在com.buxu ...
- android注册文件打开,Android项目实战系列—基于博学谷(三)注册与登录模块
由于这个模块内容较多,篇幅较长,请耐心阅读. 注册与登录模块分为三个部分 [x] [欢迎界面]() [x] [注册界面]() [x] [登录界面]() 一.欢迎界面 1.创建工程,命名为BoXueGu ...
- Android项目实战系列—基于博学谷(四)我的模块(上)
由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 我的界面 设置界面 修改密码界面 设置密保和找回密码 一."我"的界面 1.底部导航栏 ...
- android博学谷布局,Android项目实战系列—基于博学谷(四)我的模块(下)
image 由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 一.修改密码 1.创建修改密码界面 在com.boxuegu.activity包中,创建一个ja ...
- android博学谷实验报告,Android项目实战系列—基于博学谷(四)我的模块(上)...
image 由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 一."我"的界面 1.底部导航栏 (1).导入界面图片 将底部导航栏所需图片 ...
- android博学谷我的代码,Android项目实战系列—基于博学谷(四)我的模块(下)...
由于这个模块内容较多,篇幅较长,请耐心阅读. "我"的模块分为四个部分 [ ] [我的界面]() [ ] [设置界面]() [x] [修改密码界面]() [x] [设置密保和找回密 ...
- Android项目实战系列—基于博学谷(六)习题模块
由于这个模块内容较多,篇幅较长,请耐心阅读. 习题模块分为两个部分 习题列表界面 习题详情界面 一.习题列表界面 1.习题界面 (1).创建习题界面 在res/layout文件夹中,新建一个布局文件, ...
最新文章
- 深度学习的分布式训练--数据并行和模型并行
- 计算机二级vf知识点总结,2015年计算机二级考试《VFP》复习重点:第四章
- “黄背心”运动持续进行 马克龙发长信呼吁沟通
- ACM PKU 2559 Largest Rectangle in a Histogram http://acm.pku.edu.cn/JudgeOnline/problem?id=2559
- MySQL基本操作指令
- Java中super与this
- 西门子uss通讯实例_西门子plc1200系列的功能特点有哪些?
- 激活层是每一层都有吗_每一个日出日落,都是岁月痕迹。这些在东软的第一次,你还记得吗...
- 一个html页面最多写多少代码,在多个页面使用同一个HTML片段的代码
- c++11中using的使用
- spring3 运行起来(即做个demo)所需要的jar包
- skywalking学习
- 服务器主板支持什么cpu,怎么看主板支持什么CPU(主板和cpu兼容搭配知识)
- 【Python入门练手小项目】画一个蓝胖子❤️
- Android 多渠道包
- Unbuntu下U盘突然权限只读,无法重命名和复制粘贴文件的问题修复
- 国内TCP单边 加速 的 正确 做法
- app应用程序的好处
- MySQL数据库中视图的作用
- shell在xcode中涉及到的关键字