This commit is contained in:
hch
2024-03-20 16:07:17 +08:00
parent c30f18eaa9
commit 04d3faa0cb
92 changed files with 3349 additions and 1195 deletions

View File

@@ -15,6 +15,12 @@ android {
ndk {
abiFilters "armeabi-v7a", "arm64-v8a"
}
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
packagingOptions {
@@ -65,6 +71,7 @@ repositories {
dependencies {
annotationProcessor rootProject.ext.dependencies["arouter-compiler"]
implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])
api files('libs/jcc-bate-0.7.3.jar')
compileOnly fileTree(dir: '../libs', include: ['*.aar'])

View File

@@ -240,6 +240,8 @@ public class Constants {
public static final String VIDEO_ID = "videoId";
public static final String VIDEO_COMMENT_BEAN = "videoCommnetBean";
public static final String VIDEO_FACE_OPEN = "videoOpenFace";
public static final String VIDEO_IS_COMMENT = "videoIsComment";
public static final String VIDEO_REPLY_ID = "VIDEO_REPLY_ID";
public static final String VIDEO_FACE_HEIGHT = "videoFaceHeight";
public static final String VIDEO_DURATION = "videoDuration";
public static final String VIDEO_PATH = "videoPath";
@@ -306,5 +308,6 @@ public class Constants {
public static String isSetRemarkText = "";//修改的备注信息
public static boolean isShowLiveDialog = false;//是否在直播间打开单聊
public static int firstInto = 0;//
public static final String TO_COMMUNITY_ID = "to_id";
}

View File

@@ -11,15 +11,18 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.R;
import com.yunbao.common.adapter.CommentAdapter;
import com.yunbao.common.bean.ActiveBean;
@@ -28,6 +31,7 @@ import com.yunbao.common.dialog.ImagePreviewDialog;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.manager.OpenAdManager;
import com.yunbao.common.utils.DialogUitl;
@@ -41,8 +45,10 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@Route(path = RouteUtil.PATH_COMMUNITY)
public class CommunityDetailsActivity extends AbsActivity {
ActiveBean activeBean;
private ActiveBean activeBean;
private String activeId;
private ImageView avatar;
private TextView name;
private TextView time;
@@ -61,6 +67,7 @@ public class CommunityDetailsActivity extends AbsActivity {
private EditText comment;
private ImageView send;
private boolean isComment = false;
private RelativeLayout videoLayout;
@Override
protected int getLayoutId() {
@@ -81,13 +88,13 @@ public class CommunityDetailsActivity extends AbsActivity {
@Override
protected void main() {
activeBean = getIntent().getParcelableExtra("active");
activeId = getIntent().getStringExtra(Constants.TO_COMMUNITY_ID);
initView();
initData();
getReply();
}
private void initView() {
videoLayout = findViewById(R.id.videoLayout);
send = findViewById(R.id.send);
comment = findViewById(R.id.comment);
replyCount = findViewById(R.id.replyCount);
@@ -222,7 +229,13 @@ public class CommunityDetailsActivity extends AbsActivity {
findViewById(R.id.userLayout).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
UserHomeActivity.forwardUserHomeActivity(CommunityDetailsActivity.this, activeBean.getUser_id());
RouteUtil.forwardUserHome(activeBean.getUser_id());
}
});
videoLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@@ -231,7 +244,7 @@ public class CommunityDetailsActivity extends AbsActivity {
CommentBean replyComment;
private void getReply() {
CommonHttpUtil.getCommunityComment(activeBean.getId(), activeBean.getUser_id(), new HttpCallback() {
CommonHttpUtil.getCommunityComment(activeBean.getId(), activeBean.getUser_id(), 1, new HttpCallback() {
@SuppressLint("SetTextI18n")
@Override
public void onSuccess(int code, String msg, String[] info) {
@@ -256,7 +269,7 @@ public class CommunityDetailsActivity extends AbsActivity {
}
@Override
public void onDel(CommentBean activeBean, int position) {
public void onDel(CommentBean activeBean) {
//一级回复 删除
CommonHttpUtil.delCom(activeBean.getId(), new HttpCallback() {
@Override
@@ -298,6 +311,22 @@ public class CommunityDetailsActivity extends AbsActivity {
@SuppressLint("UseCompatLoadingForDrawables")
private void initData() {
LiveNetManager.get(mContext).getDynamicInfo(activeId, new com.yunbao.common.http.base.HttpCallback<ActiveBean>() {
@Override
public void onSuccess(ActiveBean data) {
activeBean = data;
initInfo();
getReply();
}
@Override
public void onError(String error) {
}
});
}
private void initInfo() {
ImgLoader.display(CommunityDetailsActivity.this, CommonAppConfig.getInstance().getUserBean().getAvatarThumb(), userAvatar);
ImgLoader.display(CommunityDetailsActivity.this, activeBean.getUser_avatar(), avatar);
name.setText(activeBean.getUser_name());
@@ -325,7 +354,8 @@ public class CommunityDetailsActivity extends AbsActivity {
}
mNineGridLayout.setData(tempList);
} else {
ImgLoader.display(CommunityDetailsActivity.this, activeBean.getUser_avatar(), videoImage);
ImgLoader.display(CommunityDetailsActivity.this, activeBean.getVideo() + "?vframe/jpg/offset/0", videoImage);
videoLayout.setVisibility(View.VISIBLE);
}
if (activeBean.getIs_love().equals("1")) {
ImgLoader.display(CommunityDetailsActivity.this, R.mipmap.icon_like, like);

View File

@@ -27,6 +27,7 @@ import androidx.fragment.app.FragmentActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSONObject;
import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.OnDismissListener;
@@ -34,23 +35,33 @@ import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.bigkoo.pickerview.view.TimePickerView;
import com.google.gson.Gson;
import com.lzy.okgo.utils.HttpUtils;
import com.yunbao.common.R;
import com.yunbao.common.bean.NewCommunityType;
import com.yunbao.common.custom.ItemDecoration;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.manager.CommunityTypeManager;
import com.yunbao.common.manager.OpenAdManager;
import com.yunbao.common.upload.UploadBean;
import com.yunbao.common.upload.UploadCallback;
import com.yunbao.common.upload.UploadQnImpl;
import com.yunbao.common.utils.ActiveImageAdapter;
import com.yunbao.common.utils.DateFormatUtil;
import com.yunbao.common.utils.FilesUtils;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.ProcessImageUtil;
import com.yunbao.common.utils.ProcessResultUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
public class CommunitySendActivity extends AbsActivity {
public static final int PERMISSION_REQUEST_CODE_IMG = 0;
@@ -65,7 +76,7 @@ public class CommunitySendActivity extends AbsActivity {
private final int CHOOSE_IMG = 100;//Android 5.0以下的
private final int CHOOSE_VIDEO = 200;//Android 5.0以上的
private List<Uri> uriList = new ArrayList<>();
private Uri videoUri;
private File videoFile;
private ActiveImageAdapter activeImageAdapter;
private VideoView videoView;
private RelativeLayout videoViewLayout;
@@ -74,6 +85,12 @@ public class CommunitySendActivity extends AbsActivity {
private List<String> talkList = new ArrayList<>();
private TextView submit;
private boolean isImage;
UploadQnImpl mUploadStrategy;
private List<String> imgUrlList = new ArrayList<>();
private String videoUrl;
List<NewCommunityType> newCommunityTypeList = new ArrayList<>();
int talkId;
@Override
protected int getLayoutId() {
@@ -82,14 +99,7 @@ public class CommunitySendActivity extends AbsActivity {
@Override
protected void main() {
talkList.add("热门");
talkList.add("新秀");
talkList.add("颜值");
talkList.add("舞蹈");
talkList.add("男神");
talkList.add("音乐");
talkList.add("英语");
newCommunityTypeList = new CommunityTypeManager(mContext).getCommunityTypeList();
content = findViewById(R.id.content);
submit = findViewById(R.id.submit);
submit.setVisibility(View.VISIBLE);
@@ -106,13 +116,23 @@ public class CommunitySendActivity extends AbsActivity {
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
submit();
List<UploadBean> uploadBeanList = new ArrayList<>();
if (isImage) {
for (int i = 0; i < activeImageAdapter.getImageFileList().size(); i++) {
UploadBean uploadBean = new UploadBean(activeImageAdapter.getImageFileList().get(i), UploadBean.IMG);
uploadBeanList.add(uploadBean);
}
uploadFile(uploadBeanList, true);
} else {
uploadBeanList.add(new UploadBean(videoFile, UploadBean.VIDEO));
uploadFile(uploadBeanList, false);
}
}
});
delVideo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
videoUri = null;
videoFile = null;
videoView.stopPlayback();
videoViewLayout.setVisibility(View.GONE);
}
@@ -201,31 +221,49 @@ public class CommunitySendActivity extends AbsActivity {
}
private void submit() {
StringBuffer files = new StringBuffer();
if (isImage) {
for (int i = 0; i < uriList.size(); i++) {
if (i == 0) {
files.append(uri2File(uriList.get(i)).getPath());
} else {
files.append("," + uri2File(uriList.get(i)).getPath());
}
if (imgUrlList.size() == 0) {
ToastUtil.show("请选择图片或者视频");
return;
}
} else {
files.append(uri2File(videoUri).getPath());
if (StringUtil.isEmpty(videoUrl)) {
ToastUtil.show("请选择图片或者视频");
return;
}
}
CommonHttpUtil.pushCommunity(isImage, content.getText().toString(), "1", files.toString(), chooseTime.getText().toString(), new HttpCallback() {
String imgUrl = "";
if (isImage) {
imgUrl = new Gson().toJson(imgUrlList);
}
String tempTime = "";
if (!chooseTime.getText().toString().equals("立即发表")) {
tempTime = chooseTime.getText().toString();
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("msg", content.getText().toString());
CommonHttpUtil.pushCommunity(isImage, jsonObject.toString(), String.valueOf(talkId), imgUrl, videoUrl, tempTime, new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0) {
ToastUtil.show("发布成功");
finish();
}
}
});
}
private void showTalkChooseDialog() {
talkList = new ArrayList<>();
for (int i = 0; i < newCommunityTypeList.size(); i++) {
talkList.add(newCommunityTypeList.get(i).getTalk_name());
}
OptionsPickerView pickerView = new OptionsPickerBuilder(CommunitySendActivity.this, new OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
talkId = newCommunityTypeList.get(options1).getId();
talkContent.setText(talkList.get(options1));
talkContent.setVisibility(View.VISIBLE);
}
}).setTitleText("选择话题").setContentTextSize(16).build();
pickerView.setPicker(talkList, null, null);
@@ -304,7 +342,7 @@ public class CommunitySendActivity extends AbsActivity {
List<String> tempList = new ArrayList<>();
for (int i = 0; i < clipData.getItemCount(); i++) {
imageUris[i] = clipData.getItemAt(i).getUri();
File file = new File(uri2File(imageUris[i]).getPath());
File file = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, imageUris[i])));
tempList.add(file.getPath());
L.e("imageUris:" + imageUris[i].getPath() + "_" + imageUris[i].getEncodedPath());
}
@@ -314,7 +352,7 @@ public class CommunitySendActivity extends AbsActivity {
imageUris = new Uri[]{data.getData()};
uriList.add(imageUris[0]);
List<String> tempList = new ArrayList<>();
File file = new File(uri2File(imageUris[0]).getPath());
File file = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, imageUris[0])));
tempList.add(file.getPath());
activeImageAdapter.insertList(tempList);
}
@@ -322,26 +360,34 @@ public class CommunitySendActivity extends AbsActivity {
isImage = true;
} else if (requestCode == CHOOSE_VIDEO && resultCode == RESULT_OK && data != null) {
Uri uri = data.getData();
videoUri = uri;
videoView.setVideoURI(videoUri);
videoFile = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, uri)));
videoView.setVideoURI(uri);
videoView.start();
videoViewLayout.setVisibility(View.VISIBLE);
isImage = false;
}
}
private File uri2File(Uri uri) {
String img_path;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null);
if (actualimagecursor == null) {
img_path = uri.getPath();
} else {
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
img_path = actualimagecursor.getString(actual_image_column_index);
private void uploadFile(List<UploadBean> uploadBeans, boolean isImg) {
if (mUploadStrategy == null) {
mUploadStrategy = new UploadQnImpl(mContext);
}
File file = new File(img_path);
return file;
mUploadStrategy.upload(uploadBeans, true, new UploadCallback() {
@Override
public void onFinish(List<UploadBean> list, boolean success) {
if (!success) {
return;
}
if (isImage) {
for (int i = 0; i < list.size(); i++) {
imgUrlList.add(list.get(i).getRemoteAccessUrl());
}
} else {
videoUrl = list.get(0).getRemoteAccessUrl();
}
submit();
L.e(new Gson().toJson(list));
}
}, isImg);
}
}

View File

@@ -1,24 +1,36 @@
package com.yunbao.common.activity;
import android.content.Context;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.Outline;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewOutlineProvider;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
import com.alibaba.android.arouter.facade.annotation.Route;
import com.alibaba.fastjson.JSONArray;
import com.google.gson.Gson;
import com.makeramen.roundedimageview.RoundedImageView;
import com.ms.banner.Banner;
import com.ms.banner.listener.OnBannerClickListener;
import com.xuexiang.xui.widget.flowlayout.FlowTagLayout;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
@@ -26,27 +38,40 @@ import com.yunbao.common.R;
import com.yunbao.common.adapter.LabelTagAdapter;
import com.yunbao.common.adapter.UserCommunityAdapter;
import com.yunbao.common.adapter.UserHomeImgAdapter;
import com.yunbao.common.bean.ActiveBean;
import com.yunbao.common.bean.ActiveOtherBean;
import com.yunbao.common.bean.HomeUserExhibitInfoBean;
import com.yunbao.common.bean.HomeUserInfoBean;
import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.bean.LabelBean;
import com.yunbao.common.bean.MessageUserInfoBean;
import com.yunbao.common.bean.UserHomeImgBean;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.upload.UploadBean;
import com.yunbao.common.upload.UploadCallback;
import com.yunbao.common.upload.UploadQnImpl;
import com.yunbao.common.utils.DialogUitl;
import com.yunbao.common.utils.FilesUtils;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.UserHomeImgsViewHolder;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import pl.droidsonroids.gif.GifImageView;
@Route(path = RouteUtil.PATH_USER_HOME)
public class UserHomeActivity extends AbsActivity {
private final int CHOOSE_IMG = 100;//Android 5.0以下的
public static final int PERMISSION_REQUEST_CODE_IMG = 0;
private String uid;
private Banner mBanner;
private RecyclerView imgsRecyclerView;
@@ -65,39 +90,53 @@ public class UserHomeActivity extends AbsActivity {
private ImageView userStatusIcon;
private ImageView user_sex;
private ImageView authorIcon;
private TextView level;
private ImageView levelIcon;
private TextView vipLevel;
private LinearLayout authenticationLayout;
private TextView signature;
private LinearLayout moreLayout;
private TextView moreText;
private ImageView moreIcon;
private HomeUserInfoBean userInfo;
RecyclerView communityRecyclerView;
private RecyclerView communityRecyclerView;
private LinearLayout itemLayout01;
private LinearLayout itemLayout02;
private LinearLayout itemLayout03;
private LinearLayout itemLayout04;
FlowTagLayout myFlowTag; //我的标签
LabelTagAdapter myAdapter;
private FlowTagLayout myFlowTag; //我的标签
private LabelTagAdapter myAdapter;
private boolean isShowcase;
private boolean isAnchor;
private boolean isMe;
private RelativeLayout userPresidentLayout;
private TextView userPresidentName;
private RelativeLayout authorLayout;
private RelativeLayout levelLayout;
private RoundedImageView fansImg1;
private RoundedImageView fansImg2;
private RoundedImageView fansImg3;
private List<RoundedImageView> fansImgViewList = new ArrayList<>();
public static void forwardUserHomeActivity(Context content, String uid) {
Intent intent = new Intent(content, UserHomeActivity.class);
intent.putExtra(Constants.TO_UID, uid);
content.startActivity(intent);
}
private RoundedImageView guardImg1;
private RoundedImageView guardImg2;
private RoundedImageView guardImg3;
private List<RoundedImageView> guardImgViewList = new ArrayList<>();
private RoundedImageView giftImg1;
private RoundedImageView giftImg2;
private RoundedImageView giftImg3;
private List<RoundedImageView> giftImgViewList = new ArrayList<>();
private RoundedImageView honorImg1;
private RoundedImageView honorImg2;
private RoundedImageView honorImg3;
private List<RoundedImageView> honorImgViewList = new ArrayList<>();
private TextView giftCount;
private List<String> tagList;
private GifImageView liveStatus;
private TextView topName;
private LinearLayout topLayout;
private ScrollView scrollView;
private RelativeLayout topImgLayout;
private ImageView imgUp;
private ImageView imgLabel;
private LinearLayout bottomEditLayout;
private UploadQnImpl mUploadStrategy;
private List<ActiveBean> videoList = new ArrayList<>();
@Override
protected int getLayoutId() {
@@ -128,11 +167,33 @@ public class UserHomeActivity extends AbsActivity {
public void onSuccess(int code, String msg, String[] info) {
List<ActiveOtherBean> beanList = JSONArray.parseArray(Arrays.toString(info), ActiveOtherBean.class);
UserCommunityAdapter userCommunityAdapter = new UserCommunityAdapter(mContext, beanList);
userCommunityAdapter.setOnItemClickListener(new UserCommunityAdapter.onItemClickListener() {
@Override
public void onImgItem(ActiveOtherBean bean, int position) {
if (bean.getImg_or_video().equals("1")) {
RouteUtil.forwardCommunity(bean.getId());
} else {
int playPosition = 0;
for (int i = 0; i < videoList.size(); i++) {
if (videoList.get(i).getId().equals(bean.getId())) {
playPosition = i;
}
}
RouteUtil.forwardVideoActivity();
}
}
@Override
public void onVideoItem(String activeBean, int position) {
}
});
communityRecyclerView.setAdapter(userCommunityAdapter);
}
});
}
@SuppressLint({"SetTextI18n", "UseCompatLoadingForDrawables"})
private void initData(HomeUserInfoBean userInfoBean) {
userInfo = userInfoBean;
if (!userInfo.getCheckBlack().get(0).getU2t().equals("0")) {
@@ -145,30 +206,46 @@ public class UserHomeActivity extends AbsActivity {
userPresidentName.setText(userInfo.getUserHomeTopInfo().getUser_president_name());
}
isAnchor = userInfo.getUserHomeTopInfo().getIs_anchor() == 1;
isMe = CommonAppConfig.getInstance().getUserBean().getId().equals(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id()));
ImgLoader.display(UserHomeActivity.this, userInfo.getUserHomeTopInfo().getUser_avatar(), avatar);
topName.setText(userInfo.getUserHomeTopInfo().getUser_name()); //用户名称-顶部
userName.setText(userInfo.getUserHomeTopInfo().getUser_name());//用户名称
fansCount.setText(String.valueOf(userInfo.getUserHomeTopInfo().getUser_fans_num()));//粉丝数量
likeCount.setText(String.valueOf(userInfo.getUserHomeTopInfo().getUser_love_num()));//关注数量
userId.setText("ID:" + userInfo.getUserHomeTopInfo().getUser_id());//用户ID
userStatus.setText("");//认证状态
if (isMe) {
bottomEditLayout.setVisibility(View.VISIBLE);
imgUp.setVisibility(View.VISIBLE);
imgLabel.setVisibility(View.VISIBLE);
followLayout.setVisibility(View.GONE);
}
if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getUser_goodnum())) {
userId.setText("靓号:" + userInfo.getUserHomeTopInfo().getUser_goodnum());//用户靓号
} else {
userId.setText("ID:" + userInfo.getUserHomeTopInfo().getUser_id());//用户ID
}
if (userInfo.getUserHomeTopInfo().getRong_online().equals("0")) {
userStatus.setText("在线");
userStatusIcon.setImageDrawable(getResources().getDrawable(R.mipmap.icon_green));
} else {
userStatus.setText("离线");
userStatusIcon.setImageDrawable(getResources().getDrawable(R.mipmap.icon_gray));
}
if (userInfo.getUserHomeTopInfo().getIs_live() == 1) {
liveStatus.setVisibility(View.VISIBLE);
avatar.setBackground(getResources().getDrawable(R.drawable.bg_live_1));
}
ImgLoader.display(UserHomeActivity.this, Integer.parseInt(String.valueOf(userInfo.getUserHomeTopInfo().getUser_sex())) == 0 ? R.mipmap.icon_man_new : R.mipmap.icon_wumen, user_sex);
ImgLoader.display(UserHomeActivity.this, CommonAppConfig.HOST + userInfo.getUserHomeTopInfo().getUser_level_anchor_img(), authorIcon);
ImgLoader.display(UserHomeActivity.this, userInfo.getUserHomeTopInfo().getUser_level_anchor_img(), authorIcon);
ImgLoader.display(UserHomeActivity.this, userInfo.getUserHomeTopInfo().getUser_level_img(), levelIcon);
if (isAnchor) {//是否是主播
authorLayout.setVisibility(View.VISIBLE);
levelLayout.setVisibility(View.VISIBLE);
authorIcon.setVisibility(View.VISIBLE);
authenticationLayout.setVisibility(View.VISIBLE);
itemLayout01.setVisibility(View.VISIBLE);
itemLayout02.setVisibility(View.VISIBLE);
itemLayout03.setVisibility(View.VISIBLE);
itemLayout04.setVisibility(View.VISIBLE);
} else {
authorLayout.setVisibility(View.GONE);
authorIcon.setVisibility(View.GONE);
authenticationLayout.setVisibility(View.GONE);
itemLayout03.setVisibility(View.VISIBLE);
itemLayout04.setVisibility(View.VISIBLE);
}
signature.setText(userInfo.getUserHomeTopInfo().getUser_signature());//个性签名
//标签
@@ -178,11 +255,26 @@ public class UserHomeActivity extends AbsActivity {
}
});
tagList = new ArrayList<>();
if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getAge())) {
tagList.add(userInfo.getUserHomeTopInfo().getAge() + "");
}
if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getHeight())) {
tagList.add(userInfo.getUserHomeTopInfo().getHeight());
}
if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getCareer())) {
tagList.add(userInfo.getUserHomeTopInfo().getCareer());
}
if (userInfo.getUserHomeTopInfo().getCn_label() != null) {
if (userInfo.getUserHomeTopInfo().getCn_label().size() > 0) {
for (int i = 0; i < userInfo.getUserHomeTopInfo().getCn_label().size(); i++) {
if (!StringUtil.isEmpty(userInfo.getUserHomeTopInfo().getCn_label().get(i))) {
tagList.add(userInfo.getUserHomeTopInfo().getCn_label().get(i));
}
}
myFlowTag.setAdapter(myAdapter);
myFlowTag.setTagCheckedMode(FlowTagLayout.FLOW_TAG_CHECKED_NONE);
myAdapter.setData(userInfo.getUserHomeTopInfo().getCn_label());
myAdapter.setData(tagList);
}
}
mBanner.setOutlineProvider(new ViewOutlineProvider() {
@@ -212,16 +304,18 @@ public class UserHomeActivity extends AbsActivity {
for (int i = 0; i < bannerImgList.size(); i++) {
tempList.add(new UserHomeImgBean(bannerImgList.get(i)));
}
tempList.get(0).setShow(true);
userHomeImgAdapter = new UserHomeImgAdapter(UserHomeActivity.this, tempList);
if (tempList.size() > 0) {
tempList.get(0).setShow(true);
}
userHomeImgAdapter = new UserHomeImgAdapter(UserHomeActivity.this, tempList, isMe);
imgsRecyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
imgsRecyclerView.setAdapter(userHomeImgAdapter);
userHomeImgAdapter.setOnItemClickListener(new UserHomeImgAdapter.onItemClickListener() {
@Override
public void onImgItem(UserHomeImgBean activeBean, int position) {
mBanner.onPageSelected(position);
mBanner.setCurrentPage(position);
L.e("onImgItem:" + position);
mBanner.setCurrentPage(position).start();
for (int i = 0; i < tempList.size(); i++) {
if (i == position) {
tempList.get(i).setShow(true);
@@ -231,16 +325,53 @@ public class UserHomeActivity extends AbsActivity {
}
userHomeImgAdapter.setCommentBeanList(tempList);
}
});
mBanner.setAutoPlay(false).setPages(bannerImgList, new UserHomeImgsViewHolder()).setOnBannerClickListener(new OnBannerClickListener() {
@Override
public void onBannerClick(List datas, int position) {
public void onImgDel(UserHomeImgBean activeBean, int position) {
bannerImgList.remove(position);
uploadImg(false);
}
});
mBanner.setAutoPlay(false).setPages(bannerImgList, new UserHomeImgsViewHolder()).setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
}).start();
@Override
public void onPageSelected(int position) {
L.e("onPageSelected:" + position);
for (int i = 0; i < tempList.size(); i++) {
if (i == position) {
tempList.get(i).setShow(true);
} else {
tempList.get(i).setShow(false);
}
}
userHomeImgAdapter.setCommentBeanList(tempList);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
mBanner.start();
}
private void initView() {
bottomEditLayout = findViewById(R.id.bottomEditLayout);
imgUp = findViewById(R.id.imgUp);
imgLabel = findViewById(R.id.imgLabel);
topImgLayout = findViewById(R.id.topImgLayout);
topLayout = findViewById(R.id.topLayout);
scrollView = findViewById(R.id.scrollView);
topName = findViewById(R.id.topName);
liveStatus = findViewById(R.id.liveStatus);
giftCount = findViewById(R.id.giftCount);
fansImg1 = findViewById(R.id.fansImg1);
fansImg2 = findViewById(R.id.fansImg2);
fansImg3 = findViewById(R.id.fansImg3);
@@ -248,8 +379,31 @@ public class UserHomeActivity extends AbsActivity {
fansImgViewList.add(fansImg1);
fansImgViewList.add(fansImg2);
fansImgViewList.add(fansImg3);
authorLayout = findViewById(R.id.authorLayout);
levelLayout = findViewById(R.id.levelLayout);
guardImg1 = findViewById(R.id.guardImg1);
guardImg2 = findViewById(R.id.guardImg2);
guardImg3 = findViewById(R.id.guardImg3);
guardImgViewList = new ArrayList<>();
guardImgViewList.add(guardImg1);
guardImgViewList.add(guardImg2);
guardImgViewList.add(guardImg3);
giftImg1 = findViewById(R.id.giftImg1);
giftImg2 = findViewById(R.id.giftImg2);
giftImg3 = findViewById(R.id.giftImg3);
giftImgViewList = new ArrayList<>();
giftImgViewList.add(giftImg1);
giftImgViewList.add(giftImg2);
giftImgViewList.add(giftImg3);
honorImg1 = findViewById(R.id.honorImg1);
honorImg2 = findViewById(R.id.honorImg2);
honorImg3 = findViewById(R.id.honorImg3);
honorImgViewList = new ArrayList<>();
honorImgViewList.add(honorImg1);
honorImgViewList.add(honorImg2);
honorImgViewList.add(honorImg3);
userPresidentLayout = findViewById(R.id.userPresidentLayout);
userPresidentName = findViewById(R.id.userPresidentName);
itemLayout01 = findViewById(R.id.itemLayout01);
@@ -269,9 +423,10 @@ public class UserHomeActivity extends AbsActivity {
userStatus = findViewById(R.id.userStatus);
userStatusIcon = findViewById(R.id.userStatusIcon);
user_sex = findViewById(R.id.user_sex);
levelIcon = findViewById(R.id.levelIcon);
level = findViewById(R.id.level);
authorIcon = findViewById(R.id.authorlIcon);
authenticationLayout = findViewById(R.id.authenticationLayout);
signature = findViewById(R.id.signature);
moreLayout = findViewById(R.id.moreLayout);
@@ -349,6 +504,110 @@ public class UserHomeActivity extends AbsActivity {
finish();
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
int height = (int) (topImgLayout.getMeasuredHeight() * 1.2);
if (scrollY <= 0) {
//滑动之前,标题栏布局背景颜色为完全透明,标题文字完全透明
topLayout.setBackgroundColor(Color.argb(0, 0, 0, 0));
topName.setTextColor(Color.argb(0, 255, 255, 255));
//让mScrollView滑动的距离在0~height之间时颜色发生渐变
} else if (scrollY > 0 && scrollY <= height) {
//获取渐变率
float scale = (float) scrollY / height;
//获取渐变数值
float alpha = (255 * scale);
//布局文本颜色逐渐发生变化
topLayout.setBackgroundColor(Color.argb((int) alpha, 0, 0, 0));
topName.setTextColor(Color.argb((int) alpha, 255, 255, 255));
} else {
//当滑动距离超过height布局文本颜色完全不透明
topLayout.setBackgroundColor(Color.argb(255, 0, 0, 0));
topName.setTextColor(Color.argb(255, 255, 255, 255));
}
}
});
topLayout.setBackgroundColor(Color.argb(0, 0, 0, 0));
topName.setTextColor(Color.argb(0, 255, 255, 255));
}
imgUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (bannerImgList.size() < 9) {
selectImg();
}
}
});
bottomEditLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RouteUtil.forwardEditProfileActivity();
}
});
findViewById(R.id.setting).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SparseArray<String> array = new SparseArray<>();
array.append(1, "不感兴趣");
array.append(0, "举报");
array.append(2, "加入黑名单");
DialogUitl.showStringArrayDialog(UserHomeActivity.this, array, new DialogUitl.StringArrayDialogCallback() {
@Override
public void onItemClick(String text, int tag) {
if (tag == 0) {
CommonHttpUtil.noInterest(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id()), new com.yunbao.common.http.HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
ToastUtil.show(msg);
}
});
} else if (tag == 1) {
RouteUtil.forwardLiveReportActivity(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id()));
} else {
RouteUtil.forwardLiveReportActivity(String.valueOf(userInfo.getUserHomeTopInfo().getUser_id()));
}
}
});
}
});
}
private void selectImg() {
String permission1 = Manifest.permission.READ_EXTERNAL_STORAGE;
String permission2 = Manifest.permission.WRITE_EXTERNAL_STORAGE;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permission1 = Manifest.permission.READ_MEDIA_IMAGES;
permission2 = Manifest.permission.READ_MEDIA_VIDEO;
}
int isPermission1 = ContextCompat.checkSelfPermission(mContext, permission1);
int isPermission2 = ContextCompat.checkSelfPermission(mContext, permission2);
if (isPermission1 == PackageManager.PERMISSION_GRANTED && isPermission2 == PackageManager.PERMISSION_GRANTED) {
openImageChooserActivity();
} else {
//申请权限
ActivityCompat.requestPermissions(UserHomeActivity.this, new String[]{permission1, permission2}, PERMISSION_REQUEST_CODE_IMG);
}
}
private void openImageChooserActivity() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);
startActivityForResult(intent, CHOOSE_IMG);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE_IMG) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
openImageChooserActivity();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE_IMG);
}
}
}
private void getUseData() {
@@ -364,11 +623,56 @@ public class UserHomeActivity extends AbsActivity {
}
});
LiveNetManager.get(mContext).getUserExhibitInfoInfo(uid, new HttpCallback<HomeUserExhibitInfoBean>() {
@SuppressLint("SetTextI18n")
@Override
public void onSuccess(HomeUserExhibitInfoBean data) {
//主播粉丝团
if (data.getUserHomeTopInfo().getFans().getList() != null) {
for (int i = 0; i < data.getUserHomeTopInfo().getFans().getList().size(); i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getFans().getList().get(i).getAvatar(), fansImgViewList.get(i));
if (data.getUserHomeTopInfo().getFans().getList().size() >= 3) {
for (int i = 0; i < 3; i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getFans().getList().get(i).getAvatar(), fansImgViewList.get(i));
}
} else {
for (int i = 0; i < data.getUserHomeTopInfo().getFans().getList().size(); i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getFans().getList().get(i).getAvatar(), fansImgViewList.get(i));
}
}
}
//主播守护团
if (data.getUserHomeTopInfo().getGuard() != null) {
if (data.getUserHomeTopInfo().getGuard().size() >= 3) {
for (int i = 0; i < 3; i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getGuard().get(i).getAvatar(), guardImgViewList.get(i));
}
} else {
for (int i = 0; i < data.getUserHomeTopInfo().getGuard().size(); i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getGuard().get(i).getAvatar(), guardImgViewList.get(i));
}
}
}
//礼物墙
if (data.getGiftAlreadyWall().getGift_wall() != null) {
if (data.getGiftAlreadyWall().getGift_wall().size() >= 3) {
for (int i = 0; i < 3; i++) {
ImgLoader.display(mContext, data.getGiftAlreadyWall().getGift_wall().get(i).getGifticon(), giftImgViewList.get(i));
}
} else {
for (int i = 0; i < data.getGiftAlreadyWall().getGift_wall().size(); i++) {
ImgLoader.display(mContext, data.getGiftAlreadyWall().getGift_wall().get(i).getGifticon(), giftImgViewList.get(i));
}
}
giftCount.setText(data.getGiftAlreadyWall().getGift_wall().size() + "/36");
}
//荣誉墙
if (data.getUserHomeTopInfo().getDress() != null) {
if (data.getUserHomeTopInfo().getDress().size() >= 3) {
for (int i = 0; i < 3; i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getDress().get(i).getDisplay_src(), honorImgViewList.get(i));
}
} else {
for (int i = 0; i < data.getUserHomeTopInfo().getDress().size(); i++) {
ImgLoader.display(mContext, data.getUserHomeTopInfo().getDress().get(i).getDisplay_src(), honorImgViewList.get(i));
}
}
}
}
@@ -381,7 +685,75 @@ public class UserHomeActivity extends AbsActivity {
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == CHOOSE_IMG) {
// 获取用户选择的图片 URI
Uri[] imageUris = null;
if (data != null) {
imageUris = new Uri[]{data.getData()};
File file = new File(Objects.requireNonNull(FilesUtils.getPath(mContext, imageUris[0])));
uploadFile(file);
}
}
}
private void uploadFile(File file) {
if (mUploadStrategy == null) {
mUploadStrategy = new UploadQnImpl(mContext);
}
List<UploadBean> uploadBeans = new ArrayList<>();
UploadBean upVideoBean = new UploadBean(file, UploadBean.IMG);
uploadBeans.add(upVideoBean);
mUploadStrategy.upload(uploadBeans, true, new UploadCallback() {
@Override
public void onFinish(List<UploadBean> list, boolean success) {
if (!success) {
return;
}
bannerImgList.add("https://downs.yaoulive.com/" + list.get(0).getRemoteAccessUrl());
uploadImg(true);
L.e(new Gson().toJson(list));
}
}, true);
}
private void uploadImg(boolean isUp) {
CommonHttpUtil.uploadUserInfoImg(new Gson().toJson(bannerImgList), new com.yunbao.common.http.HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info != null) {
if (isUp) {
ToastUtil.show("上传成功");
} else {
ToastUtil.show("删除成功");
}
mBanner.setPages(bannerImgList, new UserHomeImgsViewHolder()).start();
tempList = new ArrayList<>();
for (int i = 0; i < bannerImgList.size(); i++) {
tempList.add(new UserHomeImgBean(bannerImgList.get(i)));
}
if (tempList.size() > 0) {
tempList.get(0).setShow(true);
}
userHomeImgAdapter.setCommentBeanList(tempList);
}
}
});
}
private File uri2File(Uri uri) {
String img_path;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = this.managedQuery(uri, proj, null, null, null);
if (actualimagecursor == null) {
img_path = uri.getPath();
} else {
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
img_path = actualimagecursor.getString(actual_image_column_index);
}
File file = new File(img_path);
return file;
}
}

View File

@@ -117,7 +117,16 @@ public class CommentAdapter extends RecyclerView.Adapter {
public void onClick(View v) {
if (onItemClickListener != null) {
CommentBean bean = (CommentBean) v.getTag();
onItemClickListener.onDel(bean, 0);
onItemClickListener.onDel(bean);
}
}
});
del1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
CommentBean.ReplyComment bean = (CommentBean.ReplyComment) v.getTag();
onItemClickListener.onDel(bean);
}
}
});
@@ -125,6 +134,7 @@ public class CommentAdapter extends RecyclerView.Adapter {
@SuppressLint("SetTextI18n")
public void setData(CommentBean bean) {
del.setTag(bean);
report.setTag(bean);
replyTextView.setTag(bean);
ImgLoader.display(itemView.getContext(), bean.getUser_avatar(), mAvatar);
@@ -143,6 +153,7 @@ public class CommentAdapter extends RecyclerView.Adapter {
if (bean.getReplyCommentList() != null) {
replyCount.setText("" + bean.getReplyCommentList().size() + "条回复>");
if (bean.getReplyCommentList().size() > 0) {
del1.setTag(bean.getReplyCommentList().get(0));
replyContent.setText(bean.getReplyCommentList().get(0).getContent());
ImgLoader.display(itemView.getContext(), bean.getReplyCommentList().get(0).getUser_avatar(), mAvatar01);
firstName.setText(bean.getReplyCommentList().get(0).getUser_name());
@@ -152,10 +163,10 @@ public class CommentAdapter extends RecyclerView.Adapter {
} else {
isAuth.setVisibility(View.GONE);
}
if (bean.getUser_id().equals(myUid)) {
del.setVisibility(View.VISIBLE);
if (bean.getReplyCommentList().get(0).getUser_id().equals(myUid)) {
del1.setVisibility(View.VISIBLE);
} else {
del.setVisibility(View.GONE);
del1.setVisibility(View.GONE);
}
} else {
replyLayout.setVisibility(View.GONE);
@@ -210,10 +221,10 @@ public class CommentAdapter extends RecyclerView.Adapter {
void onReport(CommentBean activeBean);
void onDel(CommentBean activeBean, int position);
void onReport(CommentBean.ReplyComment activeBean);
void onDel(CommentBean activeBean);
void onDel(CommentBean.ReplyComment activeBean);
}

View File

@@ -0,0 +1,231 @@
package com.yunbao.common.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.R;
import com.yunbao.common.bean.CommentBean;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.views.TopGradual;
import java.util.ArrayList;
import java.util.List;
public class CommentVideoAdapter extends RefreshAdapter<CommentBean> {
private Context mContext;
private String authorId;
private String myUid;
private onItemClickListener onItemClickListener;
public void setOnItemClickListener(CommentVideoAdapter.onItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public CommentVideoAdapter(Context content, String authorId,CommentVideoAdapter.onItemClickListener onItemClickListener ) {
super(content);
this.onItemClickListener = onItemClickListener;
this.mContext = content;
this.authorId = authorId;
myUid = CommonAppConfig.getInstance().getUid();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_comment_video_view, parent, false);
return new CommentViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
CommentViewHolder commentViewHolder = (CommentViewHolder) holder;
commentViewHolder.setData(mList.get(position));
}
@Override
public int getItemCount() {
return mList.size();
}
class CommentViewHolder extends RecyclerView.ViewHolder {
private RoundedImageView mAvatar;
private TextView name;
private TextView content;
private TextView report;
private TextView replyTextView;
private RoundedImageView mAvatar01;
private TextView replyContent;
private TextView replyCount;
private RecyclerView recyclerView;
private LinearLayout replyLayout;
private TextView firstName;
private TextView isAuth;
private TextView del;
private TextView author;
private TextView del1;
private TextView report1;
public CommentViewHolder(@NonNull View itemView) {
super(itemView);
firstName = itemView.findViewById(R.id.firstName);
mAvatar = itemView.findViewById(R.id.avatar);
name = itemView.findViewById(R.id.name);
content = itemView.findViewById(R.id.content);
replyTextView = itemView.findViewById(R.id.replyTextView);
report = itemView.findViewById(R.id.report);
mAvatar01 = itemView.findViewById(R.id.avatar01);
isAuth = itemView.findViewById(R.id.isAuth);
replyContent = itemView.findViewById(R.id.replyContent);
replyCount = itemView.findViewById(R.id.expand);
replyLayout = itemView.findViewById(R.id.replyLayout);
recyclerView = itemView.findViewById(R.id.recyclerView);
del = itemView.findViewById(R.id.del);
author = itemView.findViewById(R.id.author);
del1 = itemView.findViewById(R.id.del1);
report1 = itemView.findViewById(R.id.report1);
report.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
CommentBean bean = (CommentBean) v.getTag();
onItemClickListener.onReport(bean);
}
}
});
replyTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
CommentBean bean = (CommentBean) v.getTag();
onItemClickListener.onReply(bean);
}
}
});
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
CommentBean bean = (CommentBean) v.getTag();
onItemClickListener.onDel(bean);
}
}
});
del1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
CommentBean.ReplyComment bean = (CommentBean.ReplyComment) v.getTag();
onItemClickListener.onDel(bean);
}
}
});
}
@SuppressLint("SetTextI18n")
public void setData(CommentBean bean) {
del.setTag(bean);
report.setTag(bean);
replyTextView.setTag(bean);
ImgLoader.display(itemView.getContext(), bean.getUser_avatar(), mAvatar);
name.setText(bean.getUser_name());
content.setText(bean.getContent());
if (bean.getUser_id().equals(authorId)) {
author.setVisibility(View.VISIBLE);
} else {
author.setVisibility(View.GONE);
}
if (bean.getUser_id().equals(myUid)) {
del.setVisibility(View.VISIBLE);
} else {
del.setVisibility(View.GONE);
}
if (bean.getReplyCommentList() != null) {
replyCount.setText("" + bean.getReplyCommentList().size() + "条回复>");
if (bean.getReplyCommentList().size() > 0) {
del1.setTag(bean.getReplyCommentList().get(0));
replyContent.setText(bean.getReplyCommentList().get(0).getContent());
ImgLoader.display(itemView.getContext(), bean.getReplyCommentList().get(0).getUser_avatar(), mAvatar01);
firstName.setText(bean.getReplyCommentList().get(0).getUser_name());
replyLayout.setVisibility(View.VISIBLE);
if (bean.getReplyCommentList().get(0).getUser_id().equals(authorId)) {
isAuth.setVisibility(View.VISIBLE);
} else {
isAuth.setVisibility(View.GONE);
}
if (bean.getReplyCommentList().get(0).getUser_id().equals(myUid)) {
del1.setVisibility(View.VISIBLE);
} else {
del1.setVisibility(View.GONE);
}
} else {
replyLayout.setVisibility(View.GONE);
replyCount.setVisibility(View.GONE);
}
if (bean.getReplyCommentList().size() > 1) {
replyCount.setVisibility(View.VISIBLE);
replyLayout.setVisibility(View.VISIBLE);
recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, false));
recyclerView.addItemDecoration(new TopGradual());
List<CommentBean.ReplyComment> tempList = new ArrayList<>();
tempList.addAll(bean.getReplyCommentList());
tempList.remove(0);
CommentReplyAdapter commentReplyAdapter = new CommentReplyAdapter(mContext, tempList, authorId);
commentReplyAdapter.setOnItemClickListener(new CommentReplyAdapter.onItemClickListener() {
@Override
public void onReport(CommentBean.ReplyComment activeBean) {
if (onItemClickListener != null) {
onItemClickListener.onReport(activeBean);
}
}
@Override
public void onDel(CommentBean.ReplyComment activeBean) {
if (onItemClickListener != null) {
onItemClickListener.onDel(activeBean);
}
}
});
recyclerView.setAdapter(commentReplyAdapter);
recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
replyCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!bean.isShow()) {
recyclerView.setVisibility(View.VISIBLE);
replyCount.setText("收起");
} else {
recyclerView.setVisibility(View.GONE);
replyCount.setText("" + bean.getReplyCommentList().size() + "条回复>");
}
bean.setShow(!bean.isShow());
}
});
}
}
}
}
public interface onItemClickListener {
void onReply(CommentBean activeBean);
void onReport(CommentBean activeBean);
void onReport(CommentBean.ReplyComment activeBean);
void onDel(CommentBean activeBean);
void onDel(CommentBean.ReplyComment activeBean);
}
}

View File

@@ -37,7 +37,6 @@ public class LabelTagAdapter extends BaseTagAdapter<String, TextView> {
@Override
protected void convert(TextView textView, String item, int position) {
textView.setText(item);
textView.setTextColor(mContext.getResources().getColor(R.color.black2));
}
public interface OnSureOnClickListener {

View File

@@ -0,0 +1,46 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import com.xuexiang.xui.widget.flowlayout.BaseTagAdapter;
import com.yunbao.common.R;
import com.yunbao.common.bean.LabelBean;
public class LabelVideoTagAdapter extends BaseTagAdapter<String, TextView> {
OnSureOnClickListener onSureOnClickListener;
Context mContext;
public LabelVideoTagAdapter(Context context, OnSureOnClickListener onSureOnClickListener) {
super(context);
this.onSureOnClickListener = onSureOnClickListener;
this.mContext = context;
}
public LabelVideoTagAdapter(Context context) {
super(context);
}
@Override
protected TextView newViewHolder(View convertView) {
return (TextView) convertView.findViewById(R.id.tv_tag);
}
@Override
protected int getLayoutId() {
return R.layout.adapter_video_tag;
}
@Override
protected void convert(TextView textView, String item, int position) {
textView.setText(item);
}
public interface OnSureOnClickListener {
void sure(LabelBean.Children labelBean);
}
}

View File

@@ -16,7 +16,9 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.common.R;
import com.yunbao.common.activity.AbsActivity;
import com.yunbao.common.bean.ActiveOtherBean;
import com.yunbao.common.dialog.ImagePreviewDialog;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.views.NineGridLayout;
@@ -81,16 +83,17 @@ public class UserCommunityAdapter extends RecyclerView.Adapter {
comCount = itemView.findViewById(R.id.comCount);
shareCount = itemView.findViewById(R.id.shareCount);
mAvatar.setOnClickListener(new View.OnClickListener() {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onImgItem((String) v.getTag(), getPosition());
onItemClickListener.onImgItem((ActiveOtherBean) v.getTag(), getPosition());
}
});
}
@SuppressLint("SetTextI18n")
public void setData(ActiveOtherBean bean) {
itemView.setTag(bean);
mAvatar.setTag(bean);
ImgLoader.display(mContext, bean.getUser_avatar(), mAvatar);
userName.setText(bean.getUser_name());
@@ -104,7 +107,19 @@ public class UserCommunityAdapter extends RecyclerView.Adapter {
nineGridLayout.setActionListener(new NineGridLayout.ActionListener() {
@Override
public void onItemClick(List<?> dataList, int position) {
ImagePreviewDialog dialog = new ImagePreviewDialog();
dialog.setImageInfo(dataList.size(), position, false, new ImagePreviewDialog.ActionListener() {
@Override
public void loadImage(ImageView imageView, int position) {
ImgLoader.display(mContext, (String) (dataList.get(position)), imageView);
}
@Override
public void onDeleteClick(int position) {
}
});
dialog.show(((AbsActivity) mContext).getSupportFragmentManager(), "ImagePreviewDialog");
}
@Override
@@ -119,14 +134,18 @@ public class UserCommunityAdapter extends RecyclerView.Adapter {
tempList.add(String.valueOf(jsonArray.get(i)));
}
nineGridLayout.setData(tempList);
videoLayout.setVisibility(View.GONE);
} else {
ImgLoader.display(mContext, bean.getUser_avatar(), videoImage);
videoLayout.setVisibility(View.VISIBLE);
ImgLoader.display(mContext, bean.getVideo() + "?vframe/jpg/offset/0", videoImage);
}
}
}
public interface onItemClickListener {
void onImgItem(String activeBean, int position);
void onImgItem(ActiveOtherBean activeBean, int position);
void onVideoItem(String activeBean, int position);
}
}

View File

@@ -6,7 +6,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
@@ -22,17 +21,15 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter {
private List<UserHomeImgBean> commentBeanList;
private Context mContext;
private onItemClickListener onItemClickListener;
private boolean isMe;
public void setOnItemClickListener(UserHomeImgAdapter.onItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public List<UserHomeImgBean> getCommentBeanList() {
return commentBeanList;
}
public UserHomeImgAdapter(Context content, List<UserHomeImgBean> commentBeanList) {
public UserHomeImgAdapter(Context content, List<UserHomeImgBean> commentBeanList, boolean isMe) {
this.mContext = content;
this.isMe = isMe;
this.commentBeanList = commentBeanList;
}
@@ -61,11 +58,13 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter {
class CommentViewHolder extends RecyclerView.ViewHolder {
RoundedImageView mAvatar01;
RoundedImageView mAvatar02;
ImageView del;
public CommentViewHolder(@NonNull View itemView) {
super(itemView);
mAvatar01 = itemView.findViewById(R.id.avatar01);
mAvatar02 = itemView.findViewById(R.id.avatar02);
del = itemView.findViewById(R.id.del);
}
@SuppressLint("SetTextI18n")
@@ -74,15 +73,29 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter {
mAvatar01.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.onImgItem((UserHomeImgBean) v.getTag(), position);
if (onItemClickListener != null) {
onItemClickListener.onImgItem((UserHomeImgBean) v.getTag(), position);
}
}
});
del.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null) {
onItemClickListener.onImgDel((UserHomeImgBean) v.getTag(), position);
}
}
});
ImgLoader.display(mContext, bean.getImgurl(), mAvatar01);
ImgLoader.display(mContext, bean.getImgurl(), mAvatar02);
if (bean.isShow()) {
if (isMe) {
del.setVisibility(View.VISIBLE);
}
mAvatar01.setVisibility(View.GONE);
mAvatar02.setVisibility(View.VISIBLE);
} else {
del.setVisibility(View.GONE);
mAvatar01.setVisibility(View.VISIBLE);
mAvatar02.setVisibility(View.GONE);
}
@@ -91,5 +104,7 @@ public class UserHomeImgAdapter extends RecyclerView.Adapter {
public interface onItemClickListener {
void onImgItem(UserHomeImgBean activeBean, int position);
void onImgDel(UserHomeImgBean activeBean, int position);
}
}

View File

@@ -1,11 +1,16 @@
package com.yunbao.common.bean;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
import java.util.List;
/**
* 社區动态
*/
public class CommentBean extends BaseModel {
public class CommentBean extends BaseModel implements Parcelable {
private String id;
private String dynamic_id;
private String uid;
@@ -17,8 +22,40 @@ public class CommentBean extends BaseModel {
private String user_name;
private String user_id;
private String user_avatar;
private boolean mParentNode;//是否是父元素
private List<ReplyComment> child;
public CommentBean() {
}
public CommentBean(Parcel in) {
id = in.readString();
dynamic_id = in.readString();
uid = in.readString();
to_comment_id = in.readString();
content = in.readString();
create_time = in.readString();
status = in.readString();
is_dynamic_user = in.readString();
user_name = in.readString();
user_id = in.readString();
user_avatar = in.readString();
mParentNode = in.readByte() != 0;
isShow = in.readByte() != 0;
}
public static final Creator<CommentBean> CREATOR = new Creator<CommentBean>() {
@Override
public CommentBean createFromParcel(Parcel in) {
return new CommentBean(in);
}
@Override
public CommentBean[] newArray(int size) {
return new CommentBean[size];
}
};
public List<ReplyComment> getChild() {
return child;
}
@@ -27,6 +64,14 @@ public class CommentBean extends BaseModel {
this.child = child;
}
public boolean ismParentNode() {
return mParentNode;
}
public void setParentNode(boolean mParentNode) {
this.mParentNode = mParentNode;
}
private boolean isShow;
public String getId() {
@@ -133,6 +178,28 @@ public class CommentBean extends BaseModel {
isShow = show;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeString(id);
dest.writeString(dynamic_id);
dest.writeString(uid);
dest.writeString(to_comment_id);
dest.writeString(content);
dest.writeString(create_time);
dest.writeString(status);
dest.writeString(is_dynamic_user);
dest.writeString(user_name);
dest.writeString(user_id);
dest.writeString(user_avatar);
dest.writeByte((byte) (mParentNode ? 1 : 0));
dest.writeByte((byte) (isShow ? 1 : 0));
}
public static class ReplyComment {
private String id;
private String dynamic_id;

View File

@@ -4,13 +4,13 @@ import java.util.List;
public class HomeUserExhibitInfoBean extends BaseModel {
public UserHomeTopInfo userHomeTopInfo;
public List<GiftAlreadyWall> giftAlreadyWall;
public GiftAlreadyWall giftAlreadyWall;
public List<GiftAlreadyWall> getGiftAlreadyWall() {
public GiftAlreadyWall getGiftAlreadyWall() {
return giftAlreadyWall;
}
public void setGiftAlreadyWall(List<GiftAlreadyWall> giftAlreadyWall) {
public void setGiftAlreadyWall(GiftAlreadyWall giftAlreadyWall) {
this.giftAlreadyWall = giftAlreadyWall;
}
@@ -22,9 +22,26 @@ public class HomeUserExhibitInfoBean extends BaseModel {
this.userHomeTopInfo = userHomeTopInfo;
}
public class UserHomeTopInfo {
Fans fans;
public Fans fans;
public List<Guard> guard;
public List<Dress> dress;
public List<Guard> getGuard() {
return guard;
}
public void setGuard(List<Guard> guard) {
this.guard = guard;
}
public List<Dress> getDress() {
return dress;
}
public void setDress(List<Dress> dress) {
this.dress = dress;
}
public Fans getFans() {
return fans;
@@ -92,7 +109,6 @@ public class HomeUserExhibitInfoBean extends BaseModel {
}
}
public class GiftAlreadyWall {
private String gift_wall_lighten_number;
private String gift_wall_lighten_total;

View File

@@ -1,5 +1,7 @@
package com.yunbao.common.bean;
import android.widget.TextView;
import java.util.List;
public class HomeUserInfoBean extends BaseModel {
@@ -45,6 +47,53 @@ public class HomeUserInfoBean extends BaseModel {
private List<String> cn_label;
private List<String> en_label;
private String age;
private String height;
private String career;
private String en_career;
private String rong_online;
public String getRong_online() {
return rong_online;
}
public void setRong_online(String rong_online) {
this.rong_online = rong_online;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public String getCareer() {
return career;
}
public void setCareer(String career) {
this.career = career;
}
public String getEn_career() {
return en_career;
}
public void setEn_career(String en_career) {
this.en_career = en_career;
}
public List<String> getCn_label() {
return cn_label;
}

View File

@@ -44,6 +44,7 @@ import java.util.Locale;
public class CommonHttpUtil {
public static final String GET_UPLOAD_QI_NIU_TOKEN = "getUploadQiNiuToken";
/**
* 初始化
@@ -506,12 +507,13 @@ public class CommonHttpUtil {
* @param createAt
* @param callback
*/
public static void pushCommunity(boolean isImgOrVideo, String content, String talkId, String fileAry, String createAt, HttpCallback callback) {
HttpClient.getInstance().get("Pdlcommunity.sendDynamic", CommonHttpConsts.GET_USER_BASEINFO)
public static void pushCommunity(boolean isImgOrVideo, String content, String talkId, String fileAry, String videoUrl, String createAt, HttpCallback callback) {
HttpClient.getInstance().post("Pdlcommunity.sendDynamic", CommonHttpConsts.GET_USER_BASEINFO)
.params("img_or_video", isImgOrVideo ? 1 : 2)
.params("content", content)
.params("talk_id", talkId)
.params("file_name_ary", fileAry)
.params("video", videoUrl)
.params("created_at", createAt)
.execute(callback);
}
@@ -522,31 +524,21 @@ public class CommonHttpUtil {
* @param callback
*/
public static void getCommunityHotList(int p, HttpCallback callback) {
HttpClient.getInstance().get("Pdlcommunity.getFindDynamicList", "Pdlcommunity.getFindDynamicList")
HttpClient.getInstance().get("Pdlcommunity.getHotDynamicList", "Pdlcommunity.getHotDynamicList")
.params("p", p)
.execute(callback);
}
/**
* 获取动态列表-热门
*
* @param callback
*/
public static void getCommunityDetails(String dynamic_id, HttpCallback callback) {
HttpClient.getInstance().get("Pdlcommunity.getDynamicInfo", "Pdlcommunity.getDynamicInfo")
.params("dynamic_id", dynamic_id)
.execute(callback);
}
/**
* 获取动态列表-评论
*
* @param callback
*/
public static void getCommunityComment(String dynamic_id, String dynamic_uid, HttpCallback callback) {
public static void getCommunityComment(String dynamic_id, String dynamic_uid, int p, HttpCallback callback) {
HttpClient.getInstance().get("Pdlcommunity.getDynamicCommentList", "Pdlcommunity.getDynamicCommentList")
.params("dynamic_id", dynamic_id)
.params("dynamic_uid", dynamic_uid)
.params("p", p)
.execute(callback);
}
@@ -587,7 +579,7 @@ public class CommonHttpUtil {
* 获取动态-关注
*/
public static void getCommunityFollow(int p, HttpCallback callback) {
HttpClient.getInstance().get("Pdlcommunity.getFindDynamicList", "Pdlcommunity.getFindDynamicList")
HttpClient.getInstance().get("Pdlcommunity.getAttentionDynamicList", "Pdlcommunity.getAttentionDynamicList")
.params("p", p)
.execute(callback);
}
@@ -596,7 +588,7 @@ public class CommonHttpUtil {
* 获取动态-分类
*/
public static void getTag(HttpCallback callback) {
HttpClient.getInstance().get("Pdlcommunity.getTalkBanner", "Pdlcommunity.getTalkBanner")
HttpClient.getInstance().get("Pdlcommunity.getHotTalk", "Pdlcommunity.getHotTalk")
.execute(callback);
}
@@ -640,7 +632,25 @@ public class CommonHttpUtil {
.execute(callback);
}
/**
* 上传文件 获取七牛云token的接口
*/
public static void getUploadQiNiuToken(HttpCallback callback, boolean isImg) {
HttpClient.getInstance().get("Pdluserhome.getQiNiuToken", "Pdluserhome.getQiNiuToken")
.params("uid", CommonAppConfig.getInstance().getUid())
.params("token", CommonAppConfig.getInstance().getToken())
.params("ext", isImg ? ".jpeg" : ".mp4")
.execute(callback);
}
/**
* 修改用户背景墙
*/
public static void uploadUserInfoImg(String imgs, HttpCallback callback) {
HttpClient.getInstance().post("Pdluserhome.saveUserHomeBanner", "Userhome.saveUserHomeBanner")
.params("home_banner_url_ary", imgs)
.execute(callback);
}
}

View File

@@ -1,6 +1,7 @@
package com.yunbao.common.http;
import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.bean.ActiveBean;
import com.yunbao.common.bean.ActiveModel;
import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.AnchorRecommendModel;
@@ -210,6 +211,7 @@ public interface PDLiveApi {
/**
* 获取直播间信息
*
* @param liveui 主播id
* @return
*/
@GET("/api/public/?service=Live.getLiveInfo")
@@ -1194,6 +1196,7 @@ public interface PDLiveApi {
@GET("/api/public/?service=Userhome.getUserHomeBanner")
Observable<ResponseModel<List<String>>> getUserHomeBanner(@Query("select_uid") String tuid);
@GET("/api/public/?service=Pdlinfos.getIsAnchor")
Observable<ResponseModel<MessageChatIsAnchor>> getIsAnchor();
@@ -1267,4 +1270,7 @@ public interface PDLiveApi {
@GET("/api/public/?service=Pdluserhome.getUserHomeInfo")
Observable<ResponseModel<HomeUserExhibitInfoBean>> getUserHomeExhibitInfo(@Query("select_uid") String tuid);
@GET("/api/public/?service=Pdlcommunity.getDynamicInfo")
Observable<ResponseModel<ActiveBean>> getDynamicInfo(@Query("dynamic_id") String dynamic_id);
}

View File

@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
import com.yunbao.common.R;
import com.yunbao.common.bean.ActiveBean;
import com.yunbao.common.bean.ActiveModel;
import com.yunbao.common.bean.AvatarBean;
import com.yunbao.common.bean.BaseModel;
@@ -3382,6 +3383,29 @@ public class LiveNetManager {
}).isDisposed();
}
public void getDynamicInfo(String dynamic_id, HttpCallback<ActiveBean> callback) {
API.get().pdLiveApi(mContext)
.getDynamicInfo(dynamic_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<ActiveBean>>() {
@Override
public void accept(ResponseModel<ActiveBean> messageUserInfoBeanResponseModel) throws Exception {
if (callback != null) {
callback.onSuccess(messageUserInfoBeanResponseModel.getData().getInfo());
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}
}).isDisposed();
}
private MultipartBody.Part createUploadFile(File file) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
return MultipartBody.Part.createFormData("file", file.getName(), requestBody);

View File

@@ -4,9 +4,7 @@ import android.content.Context;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yunbao.common.bean.FansModel;
import com.yunbao.common.bean.NewCommunityType;
import com.yunbao.common.bean.NewLevelModel;
import com.yunbao.common.manager.base.BaseCacheManager;
import java.util.ArrayList;
@@ -30,7 +28,7 @@ public class CommunityTypeManager extends BaseCacheManager {
}
public void UpCommunityType(String json) {
newCommunityTypeList = new Gson().fromJson(json, new TypeToken<List<NewLevelModel>>() {
newCommunityTypeList = new Gson().fromJson(json, new TypeToken<List<NewCommunityType>>() {
}.getType());
put(KEY_COMMUNITY_TYPE, newCommunityTypeList);
}

View File

@@ -0,0 +1,92 @@
package com.yunbao.common.upload;
import java.io.File;
/**
* Created by cxf on 2019/4/16.
*/
public class UploadBean {
public static final int IMG = 0;
public static final int VIDEO = 1;
public static final int VOICE = 2;
private File mOriginFile;//要被上传的源文件
private File mCompressFile;//压缩后的图片文件
private String mRemoteFileName;//上传成功后在云存储上的文件名字
private String mRemoteAccessUrl;//上传成功后在云存储上的访问地址
private boolean mSuccess;//是否上传成功了
private int mType;
private Object mTag;
public UploadBean() {
}
public UploadBean(File originFile, int type) {
mOriginFile = originFile;
mType = type;
}
public File getOriginFile() {
return mOriginFile;
}
public void setOriginFile(File originFile) {
mOriginFile = originFile;
}
public String getRemoteFileName() {
return mRemoteFileName;
}
public void setRemoteFileName(String remoteFileName) {
mRemoteFileName = remoteFileName;
}
public String getRemoteAccessUrl() {
return mRemoteAccessUrl;
}
public void setRemoteAccessUrl(String remoteAccessUrl) {
mRemoteAccessUrl = remoteAccessUrl;
}
public File getCompressFile() {
return mCompressFile;
}
public void setCompressFile(File compressFile) {
mCompressFile = compressFile;
}
public boolean isSuccess() {
return mSuccess;
}
public void setSuccess(boolean success) {
mSuccess = success;
}
public void setEmpty() {
mOriginFile = null;
mRemoteFileName = null;
mRemoteAccessUrl = null;
}
public boolean isEmpty() {
return mOriginFile == null && mRemoteFileName == null && mRemoteAccessUrl == null;
}
public int getType() {
return mType;
}
public Object getTag() {
return mTag;
}
public void setTag(Object tag) {
mTag = tag;
}
}

View File

@@ -0,0 +1,11 @@
package com.yunbao.common.upload;
import java.util.List;
/**
* Created by cxf on 2019/4/16.
*/
public interface UploadCallback {
void onFinish(List<UploadBean> list, boolean success);
}

View File

@@ -0,0 +1,215 @@
package com.yunbao.common.upload;
import android.content.Context;
import android.text.TextUtils;
import com.alibaba.fastjson.JSON;
import com.qiniu.android.common.ServiceAddress;
import com.qiniu.android.common.Zone;
import com.qiniu.android.http.ResponseInfo;
import com.qiniu.android.storage.Configuration;
import com.qiniu.android.storage.UpCompletionHandler;
import com.qiniu.android.storage.UploadManager;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.StringUtil;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.List;
import top.zibin.luban.Luban;
import top.zibin.luban.OnCompressListener;
import top.zibin.luban.OnRenameListener;
/**
* Created by cxf on 2019/4/16.
* 七牛上传文件
*/
public class UploadQnImpl implements UploadStrategy {
private static final String TAG = "UploadQnImpl";
private Context mContext;
private List<UploadBean> mList;
private int mIndex;
private boolean mNeedCompress;
private UploadCallback mUploadCallback;
private HttpCallback mGetUploadTokenCallback;
private String mToken;
private UploadManager mUploadManager;
private UpCompletionHandler mCompletionHandler;//上传回调
private Luban.Builder mLubanBuilder;
public UploadQnImpl(Context context) {
mContext = context;
mCompletionHandler = new UpCompletionHandler() {
@Override
public void complete(String key, ResponseInfo info, JSONObject response) {
L.e("UploadQnImpl 上传-----ok----> " + info.isOK() + "--key---> " + "---response---> " + (response != null ? response.toString() : null));
try {
assert response != null;
mList.get(mIndex).setRemoteAccessUrl(response.getString("key"));
} catch (JSONException e) {
throw new RuntimeException(e);
}
if (mList == null || mList.size() == 0) {
if (mUploadCallback != null) {
mUploadCallback.onFinish(mList, false);
}
return;
}
UploadBean uploadBean = mList.get(mIndex);
if (info.isOK()) {
uploadBean.setSuccess(true);
if (uploadBean.getType() == UploadBean.IMG && mNeedCompress) {
//上传完成后把 压缩后的图片 删掉
File compressedFile = uploadBean.getCompressFile();
if (compressedFile != null && compressedFile.exists()) {
File originFile = uploadBean.getOriginFile();
if (originFile != null && !compressedFile.getAbsolutePath().equals(originFile.getAbsolutePath())) {
compressedFile.delete();
}
}
}
mIndex++;
if (mIndex < mList.size()) {
uploadNext();
} else {
if (mUploadCallback != null) {
mUploadCallback.onFinish(mList, true);
}
}
} else {
upload(mList.get(mIndex));//上传失败后 重新上传
}
}
};
}
@Override
public void upload(List<UploadBean> list, boolean needCompress, UploadCallback callback, boolean isImg) {
if (callback == null) {
return;
}
if (list == null || list.size() == 0) {
callback.onFinish(list, false);
return;
}
boolean hasFile = false;
for (UploadBean bean : list) {
if (bean.getOriginFile() != null) {
hasFile = true;
break;
}
}
if (!hasFile) {
callback.onFinish(list, true);
return;
}
mList = list;
mNeedCompress = needCompress;
mUploadCallback = callback;
mIndex = 0;
if (mGetUploadTokenCallback == null) {
mGetUploadTokenCallback = new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0) {
mToken = info[0];
L.e(TAG, "-------上传的token------>" + mToken);
uploadNext();
}
}
};
}
CommonHttpUtil.getUploadQiNiuToken(mGetUploadTokenCallback, isImg);
}
@Override
public void cancelUpload() {
CommonHttpUtil.cancel(CommonHttpUtil.GET_UPLOAD_QI_NIU_TOKEN);
if (mList != null) {
mList.clear();
}
mUploadCallback = null;
}
private void uploadNext() {
UploadBean bean = null;
while (mIndex < mList.size() && (bean = mList.get(mIndex)).getOriginFile() == null) {
mIndex++;
}
if (mIndex >= mList.size()) {
if (mUploadCallback != null) {
mUploadCallback.onFinish(mList, true);
}
return;
}
if (bean.getType() == UploadBean.IMG) {
bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".jpg"));
} else if (bean.getType() == UploadBean.VIDEO) {
bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".mp4"));
} else if (bean.getType() == UploadBean.VOICE) {
bean.setRemoteFileName(StringUtil.contact(StringUtil.generateFileName(), ".m4a"));
}
if (bean.getType() == UploadBean.IMG && mNeedCompress) {
if (mLubanBuilder == null) {
mLubanBuilder = Luban.with(mContext).ignoreBy(8)//8k以下不压缩
.setTargetDir(CommonAppConfig.INNER_PATH).setRenameListener(new OnRenameListener() {
@Override
public String rename(String filePath) {
return mList.get(mIndex).getRemoteFileName();
}
}).setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
}
@Override
public void onSuccess(File file) {
UploadBean uploadBean = mList.get(mIndex);
uploadBean.setCompressFile(file);
upload(uploadBean);
}
@Override
public void onError(Throwable e) {
upload(mList.get(mIndex));
}
});
}
mLubanBuilder.load(bean.getOriginFile()).launch();
} else {
upload(bean);
}
}
private void upload(UploadBean bean) {
if (bean != null && !TextUtils.isEmpty(mToken) && mCompletionHandler != null) {
if (mUploadManager == null) {
Zone zone = new Zone(new ServiceAddress("http://upload-z0.qiniup.com"), new ServiceAddress("http://up-z0.qiniup.com"));
Configuration configuration = new Configuration.Builder().zone(zone).build();
mUploadManager = new UploadManager(configuration);
}
File uploadFile = bean.getOriginFile();
if (bean.getType() == UploadBean.IMG && mNeedCompress) {
File compressedFile = bean.getCompressFile();
if (compressedFile != null && compressedFile.exists()) {
uploadFile = compressedFile;
}
}
mUploadManager.put(uploadFile, bean.getRemoteFileName(), mToken, mCompletionHandler, null);
} else {
if (mUploadCallback != null) {
mUploadCallback.onFinish(mList, false);
}
}
}
}

View File

@@ -0,0 +1,24 @@
package com.yunbao.common.upload;
import java.util.List;
/**
* Created by cxf on 2019/4/16.
*/
public interface UploadStrategy {
/**
* 执行上传
*
* @param list 被上传的文件列表
* @param needCompress 是否需要压缩
* @param callback 上传回调
*/
void upload(List<UploadBean> list, boolean needCompress, UploadCallback callback,boolean isImg);
/**
* 取消上传
*/
void cancelUpload();
}

View File

@@ -24,6 +24,7 @@ public class ActiveImageAdapter extends RecyclerView.Adapter {
private LayoutInflater mInflater;
private View.OnClickListener mOnClickListener;
private View.OnClickListener mODelListener;
private View.OnClickListener onAddClick;
private ActionListener mActionListener;
public ActiveImageAdapter(Context context) {
@@ -70,6 +71,14 @@ public class ActiveImageAdapter extends RecyclerView.Adapter {
}
}
};
onAddClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mActionListener != null) {
mActionListener.onAddClick();
}
}
};
}
public void setActionListener(ActionListener actionListener) {
@@ -174,6 +183,7 @@ public class ActiveImageAdapter extends RecyclerView.Adapter {
del = itemView.findViewById(R.id.del);
itemView.setOnClickListener(mOnClickListener);
del.setOnClickListener(mODelListener);
mIconAdd.setOnClickListener(onAddClick);
}
void setData(ActiveImageBean bean, int position) {
@@ -183,15 +193,15 @@ public class ActiveImageAdapter extends RecyclerView.Adapter {
if (mIconAdd.getVisibility() != View.VISIBLE) {
mIconAdd.setVisibility(View.VISIBLE);
}
if (del.getVisibility() != View.VISIBLE) {
del.setVisibility(View.VISIBLE);
if (del.getVisibility() != View.GONE) {
del.setVisibility(View.GONE);
}
} else {
if (mIconAdd.getVisibility() == View.VISIBLE) {
mIconAdd.setVisibility(View.INVISIBLE);
}
if (del.getVisibility() == View.VISIBLE) {
del.setVisibility(View.GONE);
if (del.getVisibility() == View.GONE) {
del.setVisibility(View.VISIBLE);
}
ImgLoader.display(mContext, bean.getImageFile(), mImg);
}
@@ -201,8 +211,11 @@ public class ActiveImageAdapter extends RecyclerView.Adapter {
public interface ActionListener {
void onAddClick();
void onItemClick(int position);
void onDeleteAll();
void onDel(int position);
}
}

View File

@@ -36,12 +36,11 @@ public class DateFormatUtil {
public static String getTimeStrings(long time) {
Date date = new Date(time); // 创建Date对象并传入时间戳参数
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); // 设置日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 设置日期格式
String formattedDate = sdf.format(date); // 格式化日期字符串
return formattedDate;
}
public static String getVideoCurTimeString() {
return sFormat2.format(new Date());
}

View File

@@ -0,0 +1,368 @@
package com.yunbao.common.utils;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.provider.OpenableColumns;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class FilesUtils {
public final static String FILE_TAG = "/rich_editor";
public static final String DOCUMENTS_DIR = "documents";
public static String getPath(final Context context, final Uri uri) {
// DocumentProvider
if (hasKitKat() && DocumentsContract.isDocumentUri(context, uri)) {
// ExternalStorageProvider
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return Environment.getExternalStorageDirectory() + "/" + split[1];
}
// TODO handle non-primary volumes
} else if (isDownloadsDocument(uri)) { // DownloadsProvider
final String id = DocumentsContract.getDocumentId(uri);
if (id != null && id.startsWith("raw:")) {
return id.substring(4);
}
String[] contentUriPrefixesToTry = new String[]{
"content://downloads/public_downloads",
"content://downloads/my_downloads"
};
for (String contentUriPrefix : contentUriPrefixesToTry) {
Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id));
try {
String path = getDataColumn(context, contentUri, null, null);
if (path != null && !path.equals("")) {
return path;
}
} catch (Exception e) {
}
}
// path could not be retrieved using ContentResolver, therefore copy file to accessible cache using streams
String fileName = getFileName(context, uri);
File cacheDir = getDocumentCacheDir(context);
File file = generateFileNamePlus(fileName, cacheDir);
String destinationPath = null;
if (file != null) {
destinationPath = file.getAbsolutePath();
saveFileFromUri(context, uri, destinationPath);
}
return destinationPath;
} else if (isMediaDocument(uri)) { // MediaProvider
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri = null;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
} else {
//其它类型
contentUri = MediaStore.Files.getContentUri("external");
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{
split[1]
};
return getDataColumn(context, contentUri, selection, selectionArgs);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) { // MediaStore (and general)
return getDataColumn(context, uri, null, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) { // File
return uri.getPath();
}
return null;
}
@Nullable
public static File generateFileNamePlus(@Nullable String name, File directory) {
if (name == null) {
return null;
}
File file = new File(directory, name);
if (file.exists()) {
String fileName = name;
String extension = "";
int dotIndex = name.lastIndexOf('.');
if (dotIndex > 0) {
fileName = name.substring(0, dotIndex);
extension = name.substring(dotIndex);
}
int index = 0;
while (file.exists()) {
index++;
name = fileName + '(' + index + ')' + extension;
file = new File(directory, name);
}
}
try {
if (!file.createNewFile()) {
return null;
}
} catch (IOException e) {
return null;
}
return file;
}
public static String getFileName(@NonNull Context context, Uri uri) {
String mimeType = context.getContentResolver().getType(uri);
String filename = null;
if (mimeType == null && context != null) {
String path = getPath(context, uri);
if (path == null) {
filename = getName(uri.toString());
} else {
File file = new File(path);
filename = file.getName();
}
} else {
Cursor returnCursor = context.getContentResolver().query(uri, null,
null, null, null);
if (returnCursor != null) {
int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
returnCursor.moveToFirst();
filename = returnCursor.getString(nameIndex);
returnCursor.close();
}
}
return filename;
}
public static String getName(String filename) {
if (filename == null) {
return null;
}
int index = filename.lastIndexOf('/');
return filename.substring(index + 1);
}
public static File getDocumentCacheDir(@NonNull Context context) {
File dir = new File(context.getCacheDir(), DOCUMENTS_DIR);
if (!dir.exists()) {
dir.mkdirs();
}
return dir;
}
private static void saveFileFromUri(Context context, Uri uri, String destinationPath) {
InputStream is = null;
BufferedOutputStream bos = null;
try {
is = context.getContentResolver().openInputStream(uri);
bos = new BufferedOutputStream(new FileOutputStream(destinationPath, false));
byte[] buf = new byte[1024];
is.read(buf);
do {
bos.write(buf);
} while (is.read(buf) != -1);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null) is.close();
if (bos != null) bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* Get the value of the data column for this Uri. This is useful for
* MediaStore Uris, and other file-based ContentProviders.
*
* @param context The context.
* @param uri The Uri to query.
* @param selection (Optional) Filter used in the query.
* @param selectionArgs (Optional) Selection arguments used in the query.
* @return The value of the _data column, which is typically a file path.
*/
public static String getDataColumn(Context context, Uri uri, String selection,
String[] selectionArgs) {
Cursor cursor = null;
final String column = "_data";
final String[] projection = {
column
};
try {
cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.moveToFirst()) {
final int columnIndex = cursor.getColumnIndexOrThrow(column);
return cursor.getString(columnIndex);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is ExternalStorageProvider.
*/
public static boolean isExternalStorageDocument(Uri uri) {
return "com.android.externalstorage.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is DownloadsProvider.
*/
public static boolean isDownloadsDocument(Uri uri) {
return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}
/**
* @param uri The Uri to check.
* @return Whether the Uri authority is MediaProvider.
*/
public static boolean isMediaDocument(Uri uri) {
return "com.android.providers.media.documents".equals(uri.getAuthority());
}
public static boolean hasICS() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH;
}
public static boolean hasKitKat() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
}
private static final String IN_PATH = "/rich_editor/pic/";
/**
* 随机生产文件名
*
* @return
*/
private static String generateFileName() {
return "poster" + System.currentTimeMillis();
}
public static void clearLocalRichEditorCache() {
File file = new File(Environment.getExternalStorageDirectory().getPath() + FILE_TAG);
deleteDirectory(file);
}
public static String saveBitmap(Bitmap bmp) {
String parent = Environment.getExternalStorageDirectory().getPath() + FILE_TAG;
File parentF = new File(parent);
File f = new File(parent, generateFileName() + ".png");
if (!parentF.exists()) {
parentF.mkdirs();
}
if (f.exists()) {
f.delete();
}
try {
FileOutputStream out = new FileOutputStream(f);
bmp.compress(Bitmap.CompressFormat.PNG, 90, out);
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return f.getAbsolutePath();
}
/**
* 获取视频缩略图
*
* @param filePath
* @return
*/
public static Bitmap getVideoThumbnail(String filePath) {
Bitmap frameAtTime = null;
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
try {
retriever.setDataSource(filePath);
frameAtTime = retriever.getFrameAtTime();
return frameAtTime;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
try {
retriever.release();
} catch (RuntimeException e) {
e.printStackTrace();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return frameAtTime;
}
private static void deleteDirectory(File file) {
if (file == null) {
return;
}
if (file.isFile()) {
file.delete();
} else {
String[] childFilePaths = file.list();
if (childFilePaths == null || childFilePaths.length == 0) {
return;
}
for (String childFilePath : childFilePaths) {
File childFile = new File(file.getAbsolutePath() + "/" + childFilePath);
deleteDirectory(childFile);
}
file.delete();
}
}
}

View File

@@ -50,6 +50,24 @@ public class RouteUtil {
public static final String PATH_BattlePassActivity = "/main/BattlePassActivity";
public static final String PATH_SudGameActivity = "/live/SudGameActivity";
public static final String PATH_COMMUNITY_Activity = "/main/MainHomeCommunityActivity";
public static final String PATH_VIDEO_ACTIVITY = "/activity/VideoPlayActivity";
public static final String PATH_COMMUNITY = "/common/CommunityDetailsActivity";
public static final String PATH_USER_HOME = "/common/UserHomeActivity";
public static void forwardUserHome(String uid) {
ARouter.getInstance().build(PATH_USER_HOME)
.withString(Constants.TO_UID, uid)
.navigation();
}
public static void forwardCommunity(String id) {
ARouter.getInstance().build(PATH_COMMUNITY)
.withString(Constants.TO_COMMUNITY_ID, id)
.navigation();
}
public static void forwardVideoActivity() {
}
public static final String PATH_ADDRESSBOOK = "/main/MsgAddressBookActivity";

View File

@@ -160,4 +160,16 @@ public class StringUtil {
}
return false;
}
/**
* 获取随机文件名
*/
public static String generateFileName() {
return contact("android_",
CommonAppConfig.getInstance().getUid(),
"_",
DateFormatUtil.getVideoCurTimeString(),
String.valueOf(sRandom.nextInt(9999)));
}
}

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke
android:width="1dp"
android:color="#EB6FFF" />
<corners android:radius="90dp" />
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="90"
android:endColor="#f9f7ff"
android:startColor="#e5ecff" />
<corners android:radius="6dp" />
</shape>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/white" />
<stroke
android:width="1dp"
android:color="@color/white" />
<corners android:radius="15dp" />
</shape>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:bottomLeftRadius="90dp"
android:bottomRightRadius="90dp"
android:topLeftRadius="90dp"
android:topRightRadius="90dp" />
<solid android:color="#15151D" />
</shape>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<corners android:radius="8dp" />
<solid android:color="@color/transparent" />
<stroke android:width="1dp" android:color="#FF88BA" />
</shape>
</item>
</selector>

View File

@@ -105,18 +105,19 @@
android:layout_marginTop="15dp"
app:ngl_corner_radius="5dp"
app:ngl_divider_width="6dp"
app:ngl_space="30dp" />
app:ngl_space="50dp" />
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:visibility="gone">
<ImageView
android:id="@+id/videoImage"
android:layout_width="match_parent"
android:layout_height="400dp" />
android:layout_height="200dp"
android:scaleType="centerCrop" />
<ImageView
android:layout_width="40dp"

View File

@@ -70,7 +70,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_marginBottom="20dp"
android:visibility="visible">
android:visibility="gone">
<VideoView
android:id="@+id/videoView"

View File

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/itemLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/transparent"
@@ -67,19 +68,20 @@
android:layout_marginTop="15dp"
app:ngl_corner_radius="5dp"
app:ngl_divider_width="6dp"
app:ngl_space="30dp" />
app:ngl_space="90dp" />
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginLeft="50dp"
android:visibility="gone">
<ImageView
android:id="@+id/videoImage"
android:layout_width="match_parent"
android:layout_height="400dp" />
android:layout_height="200dp"
android:scaleType="centerCrop" />
<ImageView
android:layout_width="40dp"

File diff suppressed because it is too large Load Diff

View File

@@ -6,9 +6,8 @@
<TextView
android:id="@+id/tv_tag"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_height="26dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:background="@drawable/bg_flow_tag"
android:paddingStart="15dp"
@@ -16,6 +15,7 @@
android:paddingEnd="15dp"
android:paddingBottom="5dp"
android:text="标签"
android:textColor="@color/black2" />
android:textColor="@color/black2"
android:textSize="11dp" />
</LinearLayout>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv_tag"
android:layout_width="wrap_content"
android:layout_height="26dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:background="@drawable/bg_video_flow_tag"
android:paddingStart="15dp"
android:paddingTop="5dp"
android:paddingEnd="15dp"
android:paddingBottom="5dp"
android:text=""
android:textColor="@color/white"
android:textSize="11dp" />
</LinearLayout>

View File

@@ -0,0 +1,213 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="20dp"
android:paddingRight="10dp"
tools:ignore="MissingDefaultResource">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/avatar"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@mipmap/icon_data_empty"
app:riv_oval="true" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="7dp"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="栗子栗子🌰zzz"
android:textColor="#777777"
android:textSize="12dp" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="栗子栗子🌰zzz"
android:textColor="#333333"
android:textSize="12dp" />
</LinearLayout>
<TextView
android:id="@+id/author"
android:layout_width="45dp"
android:layout_height="17dp"
android:layout_marginLeft="10dp"
android:background="@drawable/bg_main_com_author"
android:gravity="center"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="作者"
android:textColor="@color/white"
android:textSize="10dp"
android:visibility="gone" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="10dp"
android:text="删除"
android:textColor="#777777"
android:textSize="11dp"
android:visibility="gone" />
<TextView
android:id="@+id/replyTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="10dp"
android:text="回复"
android:textColor="#777777"
android:textSize="11dp" />
<TextView
android:id="@+id/report"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginRight="5dp"
android:padding="10dp"
android:text="举报"
android:textColor="#333333"
android:textSize="11dp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:id="@+id/replyLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/bg_item_comment"
android:orientation="vertical"
android:padding="10dp"
android:visibility="visible">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/avatar01"
android:layout_width="23dp"
android:layout_height="23dp"
android:src="@mipmap/icon_data_empty"
app:riv_corner_radius="20dp" />
<TextView
android:id="@+id/firstName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:text=""
android:textColor="#333333"
android:textSize="12dp"
android:textStyle="bold" />
<TextView
android:id="@+id/isAuth"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_marginLeft="10dp"
android:background="@drawable/bg_main_com_author"
android:gravity="center"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:text="作者"
android:textColor="@color/white"
android:textSize="11dp"
android:visibility="gone" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<TextView
android:id="@+id/del1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="删除"
android:textColor="#777777"
android:textSize="11dp"
android:visibility="gone" />
<TextView
android:id="@+id/report1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dp"
android:padding="10dp"
android:text="举报"
android:textColor="#333333"
android:textSize="11dp"
android:textStyle="bold" />
</LinearLayout>
<TextView
android:id="@+id/replyContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="5dp"
android:text=""
android:textColor="#777777"
android:textSize="11dp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone" />
<TextView
android:id="@+id/expand"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="5dp"
android:text="共4条回复>"
android:textColor="#FF4874"
android:textSize="12dp"
android:textStyle="bold"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>

View File

@@ -163,7 +163,7 @@
android:text="删除"
android:textColor="#777777"
android:textSize="11dp"
android:visibility="visible" />
android:visibility="gone" />
<TextView
android:id="@+id/report1"

View File

@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/itemLayout"
android:layout_width="65dp"
android:layout_width="63dp"
android:layout_height="70dp"
android:gravity="center"
android:orientation="vertical"
tools:ignore="MissingDefaultResource">
@@ -13,6 +12,8 @@
android:id="@+id/avatar01"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerCrop"
android:src="@mipmap/icon_data_empty"
app:riv_corner_radius="15dp" />
@@ -21,8 +22,21 @@
android:id="@+id/avatar02"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:padding="1dp"
android:layout_centerVertical="true"
android:scaleType="centerCrop"
android:src="@mipmap/icon_data_empty"
android:background="@drawable/bg_user_home_img"
android:visibility="gone"
app:riv_corner_radius="15dp" />
</LinearLayout>
<ImageView
android:id="@+id/del"
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_alignParentEnd="true"
android:src="@mipmap/icon_img_del"
android:visibility="gone" />
</RelativeLayout>

View File

@@ -57,15 +57,14 @@
<TextView
android:id="@+id/submit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_height="30dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:layout_marginEnd="10dp"
android:background="@drawable/main_community_send"
android:paddingLeft="15dp"
android:paddingTop="10dp"
android:gravity="center"
android:paddingRight="15dp"
android:paddingBottom="10dp"
android:text="发布"
android:textColor="@color/white"
android:textSize="16dp"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1005 KiB