动态功能,类似微信朋友圈,用户可以发布文字图片视频音频等内容,分享自己的日常生活。目前直播app是市场的宠儿,在直播app中加入动态功能可以增加趣味性和用户粘性,是互动直播之外的重要内容。下面以云豹直播系统的直播代码为例,为大家展现具体的直播代码实现方式
注意:
- 本文仅用于Android端直播代码
- 本文仅供参考
如上图所示,动态页面由一个列表呈现 ,根据动态的内容,分为图片、视频和音频等不同类型,不同类型的内容使用不同的布局,图片类动态根据图片的数量使用不同的布局。图片、视频和音频可以进行点击播放,观众可以对本条动态进行评论、点赞或举报等。
这个直播代码的列表使用RecyclerView,根据不同的类型,使用不同的item布局和ViewHolder进行展示。
具体直播代码如下:
public class ActiveAdapter extends RefreshAdapter<ActiveBean> {
private View.OnClickListener mItemClickListener;
private View.OnClickListener mAvatarClickListener;
private View.OnClickListener mFollowClickListener;
private View.OnClickListener mLikeClickListener;
private View.OnClickListener mMoreClickListener;
private NineGridLayout.ActionListener mNineGridListener;
private ActiveVoiceLayout.ActionListener mVoiceListener;
private View.OnClickListener mVideoClickListener;
private Drawable[] mLikeDrawables;
private String mFollowString;
private String mUnFollowString;
private String mStatusString0;
private String mStatusString2;
private int mStatusColor0;
private int mStatusColor2;
private ActiveVoiceLayout mNowPlayVoiceLayout;//当前正在播放的语音控件
private VoiceMediaPlayerUtil mPlayerUtil;
private DownloadUtil mDownloadUtil;
private Drawable mFollowDrawable;
private Drawable mUnFollowDrawable;
private int mFollowColor;
private int mUnFollowColor;
public ActiveAdapter(Context context) {
super(context);
init(context);
}
public ActiveAdapter(Context context, List<ActiveBean> list) {
super(context, list);
init(context);
}
private void init(Context context) {
mLikeDrawables = new Drawable[6];
mLikeDrawables[0] = ContextCompat.getDrawable(context, R.mipmap.icon_active_like_0);
mLikeDrawables[1] = ContextCompat.getDrawable(context, R.mipmap.icon_active_like_1);
mLikeDrawables[2] = ContextCompat.getDrawable(context, R.mipmap.icon_active_like_2);
mLikeDrawables[3] = ContextCompat.getDrawable(context, R.mipmap.icon_active_like_3);
mLikeDrawables[4] = ContextCompat.getDrawable(context, R.mipmap.icon_active_like_4);
mLikeDrawables[5] = ContextCompat.getDrawable(context, R.mipmap.icon_active_like_5);
mFollowDrawable = ContextCompat.getDrawable(context, R.drawable.btn_active_follow_1);
mUnFollowDrawable = ContextCompat.getDrawable(context, R.drawable.btn_active_follow_0);
mFollowColor = ContextCompat.getColor(context, R.color.gray5);
mUnFollowColor = ContextCompat.getColor(context, R.color.global);
mFollowString = WordUtil.getString(R.string.following);
mUnFollowString = WordUtil.getString(R.string.follow);
mStatusString0 = WordUtil.getString(R.string.active_status_0);
mStatusString2 = WordUtil.getString(R.string.active_status_2);
mStatusColor0 = ContextCompat.getColor(mContext, R.color.gray1);
mStatusColor2 = ContextCompat.getColor(mContext, R.color.global);
mItemClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!ClickUtil.canClick()) {
return;
}
Object tag = v.getTag();
if (tag != null) {
if (!(mContext instanceof ActiveDetailActivity)) {
ActiveDetailActivity.forward(mContext, (ActiveBean) tag);
}
}
}
};
mAvatarClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!ClickUtil.canClick()) {
return;
}
Object tag = v.getTag();
if (tag == null) {
return;