上面的地址是供用户参考的,我借鉴其中内容抽出我需要的一部分做出类似今日头条上视频的功能,如下图:
1、布局:
1)主布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.dota.musicapp.activity.VideoActivity">
<include
layout="@layout/app_bar_title"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview_video"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none" />
</LinearLayout>
2)RecyclerView的子项item布局:
<?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="210dp"
android:orientation="vertical">
<cn.jzvd.JZVideoPlayerStandard
android:id="@+id/videoplayer"
android:layout_width="match_parent"
android:layout_height="160dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:padding="4dp">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:maxLines="2"
android:singleLine="true"
android:text="短片说明" />
<TextView
android:id="@+id/tv_good_point"
android:drawableTop="@drawable/good_point_false"
android:gravity="center"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="点赞数" />
<TextView
android:id="@+id/tv_comment"
android:drawableTop="@drawable/comment_number"
android:gravity="center"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="评论数" />
<ImageView
android:id="@+id/iv_three_point"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:scaleType="centerInside"
android:src="@drawable/three_point" />
</LinearLayout>
</LinearLayout>
2、主线程代码:
/**
* 视频播放短片
* 参考网址:http://blog.csdn.net/cjm2484836553/article/details/78420172
*/
public class VideoActivity extends AppCompatActivity implements View.OnClickListener {
private RecyclerView recyclerView;
private RecyclerViewVideoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video);
setHeaderName("视频短片", this, true);
initData();
initUI();
}
private void initData() {
recyclerView = (RecyclerView) findViewById(R.id.recyclerview_video);
}
private void initUI() {
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new RecyclerViewVideoAdapter(this);
recyclerView.setAdapter(adapter);
recyclerView.addOnChildAttachStateChangeListener(new RecyclerView.OnChildAttachStateChangeListener() {
@Override
public void onChildViewAttachedToWindow(View view) {
}
@Override
public void onChildViewDetachedFromWindow(View view) {
JZVideoPlayer jzvd = (JZVideoPlayer) view.findViewById(R.id.videoplayer);
if (jzvd != null && jzvd.getCurrentUrl().equals(JZMediaManager.CURRENT_PLAYING_URL)) {
JZVideoPlayer.releaseAllVideos();
}
}
});
}
@Override
public void onBackPressed() {
if (JZVideoPlayer.backPress()) {
return;
}
super.onBackPressed();
}
@Override
public void onPause() {
super.onPause();
JZVideoPlayer.releaseAllVideos();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
VideoActivity.this.finish();
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.header_back:
VideoActivity.this.finish();
break;
}
}
}
3、适配器代码:
public class RecyclerViewVideoAdapter extends RecyclerView.Adapter<RecyclerViewVideoAdapter.MyViewHolder> implements View.OnClickListener {
public static final String TAG = "AdapterRecyclerViewVideo";
int[] videoIndexs = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
private Context context;
public RecyclerViewVideoAdapter(Context context) {
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_videoview, parent, false));
return holder;
}
@SuppressLint("LongLogTag")
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
Log.i(TAG, "onBindViewHolder [" + holder.jzVideoPlayer.hashCode() + "] position=" + position);
holder.jzVideoPlayer.setUp(
VideoConstant.videoUrls[0][position], JZVideoPlayer.SCREEN_WINDOW_LIST,
VideoConstant.videoTitles[0][position]);
Picasso.with(holder.jzVideoPlayer.getContext())
.load(VideoConstant.videoThumbs[0][position])
.into(holder.jzVideoPlayer.thumbImageView);
holder.tv_good_point.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Drawable topDrawable_good_point = view.getResources().getDrawable(R.drawable.good_point_true);
if (topDrawable_good_point != null) {
topDrawable_good_point.setBounds(0,0,topDrawable_good_point.getMinimumWidth(),topDrawable_good_point.getMinimumHeight());
}
holder.tv_good_point.setCompoundDrawables(null,topDrawable_good_point,null,null);
}
});
holder.tv_comment.setOnClickListener(this);
holder.iv_three_point.setOnClickListener(this);
}
@Override
public int getItemCount() {
return videoIndexs.length;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.tv_comment:
break;
case R.id.iv_three_point:
break;
}
}
class MyViewHolder extends RecyclerView.ViewHolder {
private JZVideoPlayerStandard jzVideoPlayer;
private TextView tv_good_point,tv_comment;
private ImageView iv_three_point;
public MyViewHolder(View itemView) {
super(itemView);
jzVideoPlayer = (JZVideoPlayerStandard) itemView.findViewById(R.id.videoplayer);
tv_good_point = (TextView) itemView.findViewById(R.id.tv_good_point);
tv_comment = (TextView) itemView.findViewById(R.id.tv_comment);
iv_three_point = (ImageView) itemView.findViewById(R.id.iv_three_point);
}
}
}
4、最后,别忘记在注册表中注册该Activity和添加相应的权限
之前学习播放器的时候用SurfaceView,这个之后整理好了再上传,今天把学习的节操(又叫饺子)播放器的学习分享下,希望对需要的朋友们有所帮助。