礼物墙功能

This commit is contained in:
Martin 2024-07-13 09:27:11 +08:00
parent eb9f615f70
commit 7edd75e223
46 changed files with 1017 additions and 18 deletions

View File

@ -8,12 +8,10 @@ import android.os.Looper;
import android.util.Log; import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import com.yunbao.common.BuildConfig;
import com.yunbao.common.bean.CrashSaveBean; import com.yunbao.common.bean.CrashSaveBean;
import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.FileUtil; import com.yunbao.common.utils.FileUtil;
import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.SpUtil;
import com.yunbao.common.utils.ToastUtil;
import java.io.File; import java.io.File;
import java.io.PrintWriter; import java.io.PrintWriter;

View File

@ -0,0 +1,84 @@
package com.yunbao.common.adapter;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.R;
import com.yunbao.common.bean.UserMedalListModel;
import com.yunbao.common.bean.UserMedalListModel;
import com.yunbao.common.event.GiftNumberEvent;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.utils.Bus;
import com.yunbao.common.views.GiftNumber;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import java.util.List;
public class GiftWallAchieveAdapter extends RecyclerView.Adapter {
private List<UserMedalListModel> giftQuantityModels;
private Context mContext;
private OnItemClickListener onItemClickListener;
public GiftWallAchieveAdapter(List<UserMedalListModel> giftQuantityModels, Context context) {
this.giftQuantityModels = giftQuantityModels;
this.mContext = context;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View robotSayHelloView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_gift_wall_achieve_item, parent, false);
return new GiftWallAchieveViewHolder(robotSayHelloView);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
GiftWallAchieveViewHolder giftWallAchieveViewHolder = (GiftWallAchieveViewHolder) holder;
giftWallAchieveViewHolder.showData(giftQuantityModels.get(position));
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
@Override
public int getItemCount() {
return giftQuantityModels.size();
}
class GiftWallAchieveViewHolder extends RecyclerView.ViewHolder {
private TextView achieveName;
private ImageView achieveImg;
public GiftWallAchieveViewHolder(@NonNull View itemView) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(getAdapterPosition());
}
}
});
achieveName = itemView.findViewById(R.id.achieveName);
achieveImg = itemView.findViewById(R.id.achieve_img);
}
public void showData(UserMedalListModel quantityModel) {
achieveName.setText(quantityModel.getDressName());
ImgLoader.display(mContext,quantityModel.getDisplaySrc(),achieveImg);
}
}
public interface OnItemClickListener {
void onItemClick(int position);
}
}

View File

@ -1,8 +1,9 @@
package com.yunbao.common.bean; package com.yunbao.common.bean;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import com.stx.xhb.androidx.entity.BaseBannerInfo;
public class UserMedalModel extends BaseModel { public class UserMedalModel extends BaseModel implements BaseBannerInfo {
@SerializedName("id") @SerializedName("id")
private String id; private String id;
@SerializedName("display_src") @SerializedName("display_src")
@ -13,9 +14,22 @@ public class UserMedalModel extends BaseModel {
private String dressDescription; private String dressDescription;
@SerializedName("sort") @SerializedName("sort")
private String sort; private String sort;
@SerializedName("use_status")
private String use_status;
@SerializedName("dress_status") @SerializedName("dress_status")
private String dressStatus; private String dressStatus;
@SerializedName("users_dress_id")
private String users_dress_id;
public String getUsersDressId() {
return users_dress_id;
}
public String getUseStatus() {
return use_status;
}
public String getId() { public String getId() {
return id; return id;
} }
@ -69,4 +83,14 @@ public class UserMedalModel extends BaseModel {
this.dressStatus = dressStatus; this.dressStatus = dressStatus;
return this; return this;
} }
@Override
public Object getXBannerUrl() {
return null;
}
@Override
public String getXBannerTitle() {
return null;
}
} }

View File

@ -0,0 +1,50 @@
package com.yunbao.common.custom;
import android.view.View;
import com.stx.xhb.androidx.transformers.BasePageTransformer;
import com.yunbao.common.utils.L;
public class LiveGifWallAchieveWearTransformer extends BasePageTransformer {
private float mMinScale = 0.85f;
private float mMinAlpha = 1f;
@Override
public void handleInvisiblePage(View view, float position) {
}
@Override
public void handleLeftPage(View view, float position) {
float scale = Math.max(mMinScale, 1 + position);
float vertMargin = view.getHeight() * (1 - scale) / 2;
float horzMargin = view.getWidth() * (1 - scale) / 2;
view.setTranslationX(horzMargin - vertMargin / 2);
view.setScaleX(scale);
view.setScaleY( scale);
L.e("handleLeftPage scale:"+scale);
view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha));
}
@Override
public void handleRightPage(View view, float position) {
float scale = Math.max(mMinScale, 1 - position);
float vertMargin = view.getHeight() * (1 - scale) / 2;
float horzMargin = view.getWidth() * (1 - scale) / 2;
view.setTranslationX( -horzMargin + vertMargin / 2);
view.setScaleX( scale);
view.setScaleY( scale);
L.e("handleRightPage scale:"+scale);
view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha));
}
public void setMinAlpha(float minAlpha) {
if (minAlpha >= 0.6f && minAlpha <= 1.0f) {
mMinAlpha = minAlpha;
}
}
public void setMinScale(float minScale) {
if (minScale >= 0.6f && minScale <= 1.0f) {
mMinScale = minScale;
}
}
}

View File

@ -6,6 +6,7 @@ import androidx.core.view.ViewCompat;
import com.stx.xhb.androidx.transformers.BasePageTransformer; import com.stx.xhb.androidx.transformers.BasePageTransformer;
import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.L;
public class LiveGuardScalePageTransformer extends BasePageTransformer { public class LiveGuardScalePageTransformer extends BasePageTransformer {
/** /**
@ -39,6 +40,7 @@ public class LiveGuardScalePageTransformer extends BasePageTransformer {
view.setTranslationX(horzMargin - vertMargin / 2); view.setTranslationX(horzMargin - vertMargin / 2);
view.setScaleX(scale); view.setScaleX(scale);
view.setScaleY( scale); view.setScaleY( scale);
L.e("handleLeftPage scale:"+scale);
view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha)); view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha));
} }
@ -49,8 +51,8 @@ public class LiveGuardScalePageTransformer extends BasePageTransformer {
float horzMargin = view.getWidth() * (1 - scale) / 2; float horzMargin = view.getWidth() * (1 - scale) / 2;
view.setTranslationX( -horzMargin + vertMargin / 2); view.setTranslationX( -horzMargin + vertMargin / 2);
view.setScaleX( scale); view.setScaleX( scale);
view.setScaleY( scale); view.setScaleY( scale);
L.e("handleRightPage scale:"+scale);
view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha)); view.setAlpha( mMinAlpha + (scale - mMinScale) / (1 - mMinScale) * (1 - mMinAlpha));
} }

View File

@ -0,0 +1,122 @@
package com.yunbao.common.dialog;
import android.content.Context;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.lxj.xpopup.XPopup;
import com.yunbao.common.R;
import com.yunbao.common.adapter.GiftWallAchieveAdapter;
import com.yunbao.common.bean.MedalAchievementModel;
import com.yunbao.common.bean.UserMedalListModel;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.utils.ScreenDimenUtil;
import com.yunbao.common.utils.ToastUtil;
import java.util.ArrayList;
import java.util.List;
/**
* 礼物墙-荣誉成就
*/
public class GiftWallAchieveDialog extends AbsDialogPopupWindow {
private ImageView mIvBg;
private ImageView mIvBack;
private TextView numCount;
private boolean isFullWindows;
private RecyclerView mRecyclerView;
private GiftWallAchieveAdapter giftWallAchieveAdapter;
private String toUid;
private List<UserMedalListModel> userMedalListModelList = new ArrayList<>();
public GiftWallAchieveDialog(@NonNull Context context) {
super(context);
}
public GiftWallAchieveDialog setFullWindows(boolean fullWindows) {
isFullWindows = fullWindows;
return this;
}
public GiftWallAchieveDialog setToUid(String toUid) {
this.toUid = toUid;
return this;
}
@Override
public void buildDialog(XPopup.Builder builder) {
}
@Override
public int bindLayoutId() {
return R.layout.dialog_gift_wall_achieve;
}
@Override
protected int getPopupHeight() {
if (isFullWindows) {
return super.getPopupHeight();
}
int screenHeight = ScreenDimenUtil.getInstance().getScreenHeight();
return (int) (screenHeight * 0.8);
}
void initView() {
mIvBg = findViewById(R.id.iv_root_bg);
mIvBack = findViewById(R.id.iv_back);
mRecyclerView = findViewById(R.id.recyclerView);
mRecyclerView.setLayoutManager(new GridLayoutManager(mContext, 3, GridLayoutManager.VERTICAL, false));
numCount = findViewById(R.id.numCount);
}
@Override
protected void onCreate() {
super.onCreate();
initView();
/*RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mIvBack.getLayoutParams();
if (isFullWindows) {
params.width=DpUtil.dp2px(20);
mIvBack.setVisibility(View.VISIBLE);
mIvBg.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
params.width=DpUtil.dp2px(1);
mIvBack.setVisibility(View.INVISIBLE);
mIvBg.setScaleType(ImageView.ScaleType.FIT_XY);
}
mIvBack.setLayoutParams(params);*/
initData();
}
private void initData() {
LiveNetManager.get(getContext())
.getGiftHallMedalList(toUid,"",new HttpCallback<MedalAchievementModel>() {
@Override
public void onSuccess(MedalAchievementModel data) {
numCount.setText(data.getMedalLightNumber()+"/"+data.getMedalTotalNumber());
userMedalListModelList = data.getMedalData();
giftWallAchieveAdapter = new GiftWallAchieveAdapter(userMedalListModelList,mContext);
giftWallAchieveAdapter.setOnItemClickListener(new GiftWallAchieveAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
GiftWallAchieveWearDialog giftWallAchieveWearDialog = new GiftWallAchieveWearDialog(mContext,userMedalListModelList.get(position).getDressInfo());
giftWallAchieveWearDialog.showDialog();
}
});
mRecyclerView.setAdapter(giftWallAchieveAdapter);
}
@Override
public void onError(String error) {
ToastUtil.show(error);
}
});
}
}

View File

@ -0,0 +1,177 @@
package com.yunbao.common.dialog;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;
import com.lxj.xpopup.XPopup;
import com.stx.xhb.androidx.XBanner;
import com.stx.xhb.androidx.transformers.Transformer;
import com.yunbao.common.R;
import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.bean.UserMedalModel;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.utils.ScreenDimenUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import java.util.ArrayList;
import java.util.List;
/**
* 礼物墙-荣誉成就
*/
public class GiftWallAchieveWearDialog extends AbsDialogPopupWindow {
private ImageView mIvBg;
private ImageView mIvBack;
private boolean isFullWindows;
private String toUid;
private XBanner xBanner;
private TextView textAchieveName;
private TextView textAchieveHint;
private TextView btnConfirm;
private int selectPosition = 0;
String putOn = WordUtil.isNewZh() ? "佩戴" : "wearing";
String wearing = WordUtil.isNewZh() ? "已佩戴" : "worn";
private List<UserMedalModel> achieveWearModels = new ArrayList<>();
public GiftWallAchieveWearDialog(@NonNull Context context, List<UserMedalModel> achieveWearModels) {
super(context);
this.achieveWearModels = achieveWearModels;
}
public GiftWallAchieveWearDialog setFullWindows(boolean fullWindows) {
isFullWindows = fullWindows;
return this;
}
public GiftWallAchieveWearDialog setToUid(String toUid) {
this.toUid = toUid;
return this;
}
@Override
public void buildDialog(XPopup.Builder builder) {
}
@Override
public int bindLayoutId() {
return R.layout.dialog_gift_wall_achieve_wear;
}
@Override
protected int getPopupHeight() {
if (isFullWindows) {
return super.getPopupHeight();
}
return ScreenDimenUtil.getInstance().getScreenHeight();
}
void initView() {
mIvBg = findViewById(R.id.iv_root_bg);
mIvBack = findViewById(R.id.iv_back);
xBanner = findViewById(R.id.gift_wall_achieve_banner);
textAchieveName = findViewById(R.id.text_achieve_name);
textAchieveHint = findViewById(R.id.text_achieve_hint);
btnConfirm = findViewById(R.id.btn_confirm);
findViewById(R.id.btn_cancel).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
}
});
btnConfirm.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if (achieveWearModels.get(selectPosition).getUseStatus().equals("2") && achieveWearModels.get(selectPosition).getDressStatus().equals("2")) {
LiveNetManager.get(mContext).userUseDress("3", achieveWearModels.get(selectPosition).getUsersDressId(), new HttpCallback<BaseModel>() {
@Override
public void onSuccess(BaseModel data) {
dialog.dismiss();
}
@Override
public void onError(String error) {
ToastUtil.show(error);
}
});
}
}
});
}
@Override
protected void onCreate() {
super.onCreate();
initView();
/*RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mIvBack.getLayoutParams();
if (isFullWindows) {
params.width=DpUtil.dp2px(20);
mIvBack.setVisibility(View.VISIBLE);
mIvBg.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
params.width=DpUtil.dp2px(1);
mIvBack.setVisibility(View.INVISIBLE);
mIvBg.setScaleType(ImageView.ScaleType.FIT_XY);
}
mIvBack.setLayoutParams(params);*/
initData();
}
public void setWearInfo() {
textAchieveName.setText(achieveWearModels.get(selectPosition).getDressName());
textAchieveHint.setText(achieveWearModels.get(selectPosition).getDressDescription());
btnConfirm.setText(achieveWearModels.get(selectPosition).getUseStatus().equals("2") ? wearing : putOn);
if (achieveWearModels.get(selectPosition).getUseStatus().equals("2") && achieveWearModels.get(selectPosition).getDressStatus().equals("2")) {
btnConfirm.setBackground(getResources().getDrawable(R.drawable.gift_wall_achieve_wear_sure));
} else {
btnConfirm.setBackground(getResources().getDrawable(R.drawable.gift_wall_achieve_wear_disable));
}
}
private void initData() {
setWearInfo();
xBanner.setBannerData(R.layout.dialog_gift_wall_achieve_wear_item, achieveWearModels);
//xBanner.setCustomPageTransformer(new LiveGifWallAchieveWearTransformer());
xBanner.setIsClipChildrenMode(true);
xBanner.setPageTransformer(Transformer.Scale);
xBanner.getViewPager().setOffscreenPageLimit(3);
xBanner.loadImage(new XBanner.XBannerAdapter() {
@Override
public void loadBanner(XBanner banner, Object model, View view, int position) {
UserMedalModel guardBannerModel = ((UserMedalModel) model);
ImageView wearImg = view.findViewById(R.id.wearImg);
ImageView notUnlocked = view.findViewById(R.id.notUnlocked);
ImgLoader.display(getContext(), guardBannerModel.getDisplaySrc(), wearImg);
notUnlocked.setVisibility(guardBannerModel.getDressStatus().equals("1") ? VISIBLE : View.GONE);
}
});
xBanner.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
selectPosition = i;
setWearInfo();
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
}

View File

@ -132,7 +132,12 @@ public class GiftWallDialog extends AbsDialogPopupWindow {
mTvTab2.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); mTvTab2.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
mViewPager.setCurrentItem(1,false); mViewPager.setCurrentItem(1,false);
}); });
ViewClicksAntiShake.clicksAntiShake(mAchievement, () -> {
new GiftWallAchieveDialog(mContext).setFullWindows(false).setToUid("98889").showDialog();
});
ViewClicksAntiShake.clicksAntiShake(mIvTips, () -> {
new GiftWallRuleDialog(mContext).setFullWindows(false).showDialog();
});
} }
@Override @Override

View File

@ -0,0 +1,97 @@
package com.yunbao.common.dialog;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.lxj.xpopup.XPopup;
import com.yunbao.common.R;
import com.yunbao.common.adapter.GiftWallAchieveAdapter;
import com.yunbao.common.bean.MedalAchievementModel;
import com.yunbao.common.bean.UserMedalListModel;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.utils.ScreenDimenUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import java.util.ArrayList;
import java.util.List;
/**
* 礼物墙-規則
*/
public class GiftWallRuleDialog extends AbsDialogPopupWindow {
private ImageView mIvBg;
private ImageView mIvBack;
private ImageView iv_rule;
private boolean isFullWindows;
public GiftWallRuleDialog(@NonNull Context context) {
super(context);
}
public GiftWallRuleDialog setFullWindows(boolean fullWindows) {
isFullWindows = fullWindows;
return this;
}
@Override
public void buildDialog(XPopup.Builder builder) {
}
@Override
public int bindLayoutId() {
return R.layout.dialog_gift_wall_rule;
}
@Override
protected int getPopupHeight() {
if (isFullWindows) {
return super.getPopupHeight();
}
int screenHeight = ScreenDimenUtil.getInstance().getScreenHeight();
return (int) (screenHeight * 0.8);
}
void initView() {
mIvBg = findViewById(R.id.iv_root_bg);
mIvBack = findViewById(R.id.iv_back);
iv_rule= findViewById(R.id.iv_rule);
}
@Override
protected void onCreate() {
super.onCreate();
initView();
/*RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mIvBack.getLayoutParams();
if (isFullWindows) {
params.width=DpUtil.dp2px(20);
mIvBack.setVisibility(View.VISIBLE);
mIvBg.setScaleType(ImageView.ScaleType.CENTER_CROP);
} else {
params.width=DpUtil.dp2px(1);
mIvBack.setVisibility(View.INVISIBLE);
mIvBg.setScaleType(ImageView.ScaleType.FIT_XY);
}
mIvBack.setLayoutParams(params);*/
ImgLoader.displayDrawable(mContext, WordUtil.isNewZh() ? "https://downs.yaoulive.com/Group%201384.png" : "https://downs.yaoulive.com/Group%201381.png", -1, -1, new ImgLoader.DrawableCallback() {
@Override
public void onLoadSuccess(Drawable drawable) {
iv_rule.setImageDrawable(drawable);
}
@Override
public void onLoadFailed() {
}
});
}
}

View File

@ -1266,4 +1266,12 @@ public interface PDLiveApi {
Observable<ResponseModel<QiniuLog>> getPrankList( Observable<ResponseModel<QiniuLog>> getPrankList(
@Query("type")String type @Query("type")String type
); );
@GET("/api/public/?service=Gift.getGiftHallMedalList")
Observable<ResponseModel<MedalAchievementModel>> getGiftHallMedalList(@Query("to_uid") String liveUid,@Query("type")String type);
@GET("/api/public/?service=Dress.userUseDress")
Observable<ResponseModel<BaseModel>> userUseDress(@Query("dress_type") String dress_type,@Query("users_dress_id")String users_dress_id);
} }

View File

@ -3376,6 +3376,51 @@ public class LiveNetManager {
}).isDisposed(); }).isDisposed();
} }
public void getGiftHallMedalList(String toUid,String type, HttpCallback<MedalAchievementModel> callback) {
API.get().pdLiveApi(mContext)
.getGiftHallMedalList(toUid,type)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<MedalAchievementModel>>() {
@Override
public void accept(ResponseModel<MedalAchievementModel> listResponseModel) throws Exception {
if (callback != null) {
callback.onSuccess(listResponseModel.getData().getInfo());
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}
}).isDisposed();
}
public void userUseDress(String dressType,String usersDressId, HttpCallback<BaseModel> callback) {
API.get().pdLiveApi(mContext)
.userUseDress(dressType,usersDressId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<BaseModel>>() {
@Override
public void accept(ResponseModel<BaseModel> listResponseModel) throws Exception {
if (callback != null) {
callback.onSuccess(listResponseModel.getData().getInfo());
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}
}).isDisposed();
}
private MultipartBody.Part createUploadFile(File file) { private MultipartBody.Part createUploadFile(File file) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
return MultipartBody.Part.createFormData("file", file.getName(), requestBody); return MultipartBody.Part.createFormData("file", file.getName(), requestBody);

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="20dp"/>
<solid android:color="#7776B1"/>
</shape>

View File

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

View File

@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_root_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@mipmap/dialog_gift_wall_achieve" />
<ImageView
android:id="@+id/iv_back"
android:layout_width="50dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@mipmap/dialog_gift_wall_back" />
<TextView
android:text="@string/gift_wall_achieve_title"
android:layout_width="match_parent"
android:textSize="20sp"
android:textColor="@color/white"
android:gravity="center"
android:textStyle="bold"
android:layout_height="60dp" />
<LinearLayout
android:id="@+id/topLayout"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_below="@+id/iv_back"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_width="match_parent"
android:background="@mipmap/dialog_gift_wall_achieve_top_bg"
android:layout_height="48dp">
<ImageView
android:layout_marginLeft="10dp"
android:src="@mipmap/dialog_gift_wall_achieve_top_icon"
android:layout_width="wrap_content"
android:layout_height="16dp"/>
<TextView
android:id="@+id/numCount"
android:gravity="start|center_vertical"
android:text="0/1"
android:layout_marginLeft="5dp"
android:textColor="#FDE9D8"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"/>
<TextView
android:text="@string/wall_honor"
android:textColor="#E0E0E0"
android:textSize="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:src="@mipmap/dialog_gift_wall_more"
android:layout_marginRight="7dp"
android:layout_width="13dp"
android:layout_height="13dp"/>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_marginTop="15dp"
android:layout_width="match_parent"
android:layout_below="@+id/topLayout"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_height="wrap_content"/>
</RelativeLayout>

View File

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="264dp"
android:layout_height="240dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@mipmap/dialog_gift_wall_achieve_wear_bg">
<ImageView
android:id="@+id/btn_cancel"
android:layout_width="40dp"
android:padding="12dp"
android:layout_marginTop="5dp"
android:layout_height="40dp"
android:layout_marginEnd="5dp"
android:layout_alignParentEnd="true"
android:src="@mipmap/dialog_gift_wall_achieve_wear_cancel" />
<com.flyjingfish.gradienttextviewlib.GradientTextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="16dp"
android:letterSpacing="0.1"
android:text="@string/achievement_details"
android:textSize="16dp"
app:gradient_angle="45"
app:gradient_endColor="#FEE8C6"
app:gradient_startColor="#FFD5A3" />
<com.stx.xhb.androidx.XBanner
android:id="@+id/gift_wall_achieve_banner"
android:layout_width="264dp"
android:layout_height="80dp"
android:layout_marginTop="63dp"
app:clipChildrenLeftMargin="100dp"
app:clipChildrenRightMargin="100dp"
app:isAutoPlay="false"
app:isClipChildrenMode="true"
app:isClipChildrenModeLessThree="true"
app:isHandLoop="false"
app:isShowIndicatorOnlyOne="true"
app:isShowNumberIndicator="false"
app:pageChangeDuration="800"
app:pointsVisibility="false"
app:showIndicatorInCenter="false"
app:viewpagerMargin="20dp" />
<TextView
android:id="@+id/text_achieve_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/gift_wall_achieve_banner"
android:layout_centerHorizontal="true"
android:layout_marginTop="5dp"
android:text="成就名稱"
android:textColor="@color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/text_achieve_hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text_achieve_name"
android:layout_centerHorizontal="true"
android:layout_marginLeft="30dp"
android:layout_marginTop="5dp"
android:layout_marginRight="30dp"
android:gravity="center"
android:text="達成要求達成要求達成要求達成要求達成要求達成要求"
android:textColor="#C7C7C7"
android:textSize="8sp" />
<TextView
android:id="@+id/btn_confirm"
android:layout_width="78dp"
android:layout_height="29dp"
android:layout_below="@+id/text_achieve_hint"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:layout_marginBottom="16dp"
android:background="@drawable/gift_wall_achieve_wear_disable"
android:gravity="center"
android:text="@string/gift_wall_achieve_put_on"
android:textColor="#2D1F46"
android:textSize="12sp" />
</RelativeLayout>
</RelativeLayout>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dp"
android:layout_height="80dp"
android:orientation="vertical">
<ImageView
android:id="@+id/bg"
android:layout_width="57dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="6dp"
android:scaleType="fitXY"
android:src="@mipmap/dialog_gift_wall_achieve_wear_item_bg" />
<ImageView
android:id="@+id/wearImg"
android:layout_width="57dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="6dp"
android:scaleType="fitXY"
android:src="@mipmap/dialog_gift_wall_achieve_wear_item_bg" />
<ImageView
android:id="@+id/notUnlocked"
android:layout_width="57dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="6dp"
android:scaleType="fitXY"
android:src="@mipmap/dialog_gift_wall_achieve_wear_item_unlock" />
</RelativeLayout>

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rootView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_root_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@mipmap/dialog_gift_wall_achieve" />
<ImageView
android:id="@+id/iv_back"
android:layout_width="50dp"
android:layout_height="60dp"
android:scaleType="center"
android:src="@mipmap/dialog_gift_wall_back" />
<TextView
android:text="@string/regular_bubble"
android:layout_width="match_parent"
android:textSize="20sp"
android:textColor="@color/white"
android:gravity="center"
android:textStyle="bold"
android:layout_height="60dp" />
<ScrollView
android:layout_below="@+id/iv_back"
android:layout_width="match_parent"
android:scrollbars="vertical"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_rule"
android:padding="10dp"
android:layout_width="match_parent"
android:scaleType="fitXY"
android:layout_height="match_parent"/>
</ScrollView>
</RelativeLayout>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:gravity="center"
android:orientation="vertical"
android:layout_height="110dp">
<ImageView
android:id="@+id/achieve_img"
android:layout_width="wrap_content"
android:layout_height="90dp"/>
<TextView
android:id="@+id/achieveName"
android:layout_width="wrap_content"
android:layout_height="26dp"
android:clickable="true"
android:focusable="true"
android:gravity="center"
android:textColor="#FFFFFF"
android:textSize="12sp" />
</LinearLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 485 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 824 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

View File

@ -1501,4 +1501,6 @@
<string name="main_type_theater">短劇</string> <string name="main_type_theater">短劇</string>
<string name="prank_complete">完成*1</string> <string name="prank_complete">完成*1</string>
<string name="pking_over">主播正在PK稍後再試</string> <string name="pking_over">主播正在PK稍後再試</string>
<string name="gift_wall_achieve_put_on">佩戴</string>
<string name="gift_wall_achieve_title">榮譽成就</string>
</resources> </resources>

View File

@ -1500,4 +1500,6 @@
<string name="main_type_theater">短劇</string> <string name="main_type_theater">短劇</string>
<string name="prank_complete">完成*1</string> <string name="prank_complete">完成*1</string>
<string name="pking_over">主播正在PK稍後再試</string> <string name="pking_over">主播正在PK稍後再試</string>
<string name="gift_wall_achieve_put_on">佩戴</string>
<string name="gift_wall_achieve_title">榮譽成就</string>
</resources> </resources>

View File

@ -1501,4 +1501,6 @@
<string name="dialog_gift_wall_text_personal_hal">個人展館</string> <string name="dialog_gift_wall_text_personal_hal">個人展館</string>
<string name="dialog_gift_wall_text_site_hal">全站展館</string> <string name="dialog_gift_wall_text_site_hal">全站展館</string>
<string name="dialog_gift_wall_text_honors">榮譽成就</string> <string name="dialog_gift_wall_text_honors">榮譽成就</string>
<string name="gift_wall_achieve_put_on">佩戴</string>
<string name="gift_wall_achieve_title">榮譽成就</string>
</resources> </resources>

View File

@ -1509,4 +1509,6 @@
<string name="dialog_gift_wall_text_personal_hal">Personal hal</string> <string name="dialog_gift_wall_text_personal_hal">Personal hal</string>
<string name="dialog_gift_wall_text_site_hal">Whole site hal</string> <string name="dialog_gift_wall_text_site_hal">Whole site hal</string>
<string name="dialog_gift_wall_text_honors">Honors</string> <string name="dialog_gift_wall_text_honors">Honors</string>
<string name="gift_wall_achieve_put_on">Put on</string>
<string name="gift_wall_achieve_title">Honors</string>
</resources> </resources>

View File

@ -13,7 +13,7 @@
#Thu Feb 04 00:05:45 CST 2021 #Thu Feb 04 00:05:45 CST 2021
android.injected.testOnly=false android.injected.testOnly=false
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.configureondemand=true org.gradle.configureondemand=true
@ -23,8 +23,6 @@ android.enableJetifier=true
systemProp.http.proxyHost=127.0.0.1 systemProp.http.proxyHost=127.0.0.1
systemProp.https.proxyHost=127.0.0.1 systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7890 systemProp.https.proxyPort=10809
systemProp.http.proxyPort=7890 systemProp.http.proxyPort=10809
#android.enableR8.fullMode=true #android.enableR8.fullMode=true

View File

@ -243,7 +243,7 @@ public class SWManager extends BaseCacheManager {
// 功能模块的类型为视频截图上传 // 功能模块的类型为视频截图上传
config.modules[0].type = ContentInspectConfig.CONTENT_INSPECT_TYPE_SUPERVISE; config.modules[0].type = ContentInspectConfig.CONTENT_INSPECT_TYPE_SUPERVISE;
// 视频截图上传的频率为 2 秒一次 // 视频截图上传的频率为 2 秒一次
config.modules[0].interval = 2; config.modules[0].interval = 20;
mRtcEngine.enableContentInspect(true, config); mRtcEngine.enableContentInspect(true, config);
} }

View File

@ -67,6 +67,7 @@ public class LiveReceiveGiftBean extends BaseModel {
private String msg; private String msg;
private String msg_en; private String msg_en;
private String guard_type; private String guard_type;
private int user_naming_status;
private AllServerNotifyFFGGGDJANEvent notifyFFGGGDJANEvent; private AllServerNotifyFFGGGDJANEvent notifyFFGGGDJANEvent;
private boolean showB; private boolean showB;
@ -288,6 +289,14 @@ public class LiveReceiveGiftBean extends BaseModel {
this.hot_num = hot_num; this.hot_num = hot_num;
} }
public int getUser_naming_status() {
return user_naming_status;
}
public void setUser_naming_status(int user_naming_status) {
this.user_naming_status = user_naming_status;
}
public String getUid() { public String getUid() {
return uid; return uid;
} }

View File

@ -1024,8 +1024,8 @@ public class LiveGiftAnimPresenter {
} }
} }
} }
showGifGift(bean); showGifGift(bean);
showNormalGift(bean);
} else { } else {
showNormalGift(bean); showNormalGift(bean);
} }

View File

@ -1242,6 +1242,7 @@ public class SocketRyClient {
receiveGiftBean.setNamingLiveName(map.getString("naming_live_name")); receiveGiftBean.setNamingLiveName(map.getString("naming_live_name"));
receiveGiftBean.setNamingUid(map.getString("naming_uid")); receiveGiftBean.setNamingUid(map.getString("naming_uid"));
receiveGiftBean.setNamingLiveuid(map.getString("naming_liveuid")); receiveGiftBean.setNamingLiveuid(map.getString("naming_liveuid"));
receiveGiftBean.setUser_naming_status(map.getInteger("user_naming_status"));
receiveGiftBean.setmLiveUId(mLiveUid); receiveGiftBean.setmLiveUId(mLiveUid);
receiveGiftBean.setmTypeBuyGuard(false); receiveGiftBean.setmTypeBuyGuard(false);
receiveGiftBean.setAllServerNotify(false); receiveGiftBean.setAllServerNotify(false);

View File

@ -1142,6 +1142,7 @@ public class SocketSwClient {
receiveGiftBean.setNamingLiveName(map.getString("naming_live_name")); receiveGiftBean.setNamingLiveName(map.getString("naming_live_name"));
receiveGiftBean.setNamingUid(map.getString("naming_uid")); receiveGiftBean.setNamingUid(map.getString("naming_uid"));
receiveGiftBean.setNamingLiveuid(map.getString("naming_liveuid")); receiveGiftBean.setNamingLiveuid(map.getString("naming_liveuid"));
receiveGiftBean.setUser_naming_status(map.getInteger("user_naming_status"));
receiveGiftBean.setmLiveUId(mLiveUid); receiveGiftBean.setmLiveUId(mLiveUid);
receiveGiftBean.setmTypeBuyGuard(false); receiveGiftBean.setmTypeBuyGuard(false);
receiveGiftBean.setAllServerNotify(false); receiveGiftBean.setAllServerNotify(false);

View File

@ -19,6 +19,7 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.lxj.xpopup.XPopup; import com.lxj.xpopup.XPopup;
import com.makeramen.roundedimageview.RoundedImageView;
import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.utils.MobclickAgent;
import com.yunbao.common.bean.LiveGiftBean; import com.yunbao.common.bean.LiveGiftBean;
import com.yunbao.common.event.LiveGiftDialogEvent; import com.yunbao.common.event.LiveGiftDialogEvent;
@ -26,7 +27,9 @@ import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.interfaces.CommonCallback;
import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.GiftCacheUtil; import com.yunbao.common.utils.GiftCacheUtil;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.views.weight.MarqueeTextView;
import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.R; import com.yunbao.live.R;
import com.yunbao.live.dialog.SendRendPacketPopup; import com.yunbao.live.dialog.SendRendPacketPopup;
@ -41,6 +44,9 @@ public class FrameGiftViewHolder extends RecyclerView.ViewHolder {
private ScaleAnimation mAnimation; private ScaleAnimation mAnimation;
private LinearLayout mLoadingLayout; private LinearLayout mLoadingLayout;
private ImageView mLoading; private ImageView mLoading;
private LinearLayout namingLayout;
private MarqueeTextView naming_name;
private RoundedImageView avatar;
public FrameGiftViewHolder(@NonNull View itemView) { public FrameGiftViewHolder(@NonNull View itemView) {
super(itemView); super(itemView);
@ -54,6 +60,10 @@ public class FrameGiftViewHolder extends RecyclerView.ViewHolder {
mLoadingLayout = itemView.findViewById(R.id.gift_loading_layout); mLoadingLayout = itemView.findViewById(R.id.gift_loading_layout);
mLoading = itemView.findViewById(R.id.gift_loading); mLoading = itemView.findViewById(R.id.gift_loading);
namingLayout = itemView.findViewById(R.id.namingLayout);
naming_name = itemView.findViewById(R.id.naming_name);
avatar = itemView.findViewById(R.id.avatar);
mAnimation = new ScaleAnimation(0.9f, 1.1f, 0.9f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); mAnimation = new ScaleAnimation(0.9f, 1.1f, 0.9f, 1.1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
mAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); mAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
mAnimation.setDuration(400); mAnimation.setDuration(400);
@ -89,7 +99,8 @@ public class FrameGiftViewHolder extends RecyclerView.ViewHolder {
// } else { // } else {
giftName.setText(model.getName()); giftName.setText(model.getName());
// } // }
naming_name.setText(model.getNamingLiveName());
ImgLoader.display(mContext,model.getNamingLiveAvatar(),avatar);
//特殊礼物红包 //特殊礼物红包
if (model.getType() == 9999999) { if (model.getType() == 9999999) {
mPayIco.setVisibility(View.GONE); mPayIco.setVisibility(View.GONE);
@ -114,7 +125,11 @@ public class FrameGiftViewHolder extends RecyclerView.ViewHolder {
} else { } else {
mLoadingLayout.setVisibility(GiftCacheUtil.checkGiftIsDownload(model.getId()) ? View.GONE : View.VISIBLE); mLoadingLayout.setVisibility(GiftCacheUtil.checkGiftIsDownload(model.getId()) ? View.GONE : View.VISIBLE);
} }
if(model.isChecked()&& !StringUtil.isEmpty(model.getNamingLiveName())){
namingLayout.setVisibility(View.VISIBLE);
}else{
namingLayout.setVisibility(View.GONE);
}
} }

View File

@ -41,6 +41,7 @@ public class LiveGiftViewHolder extends AbsViewHolder {
private TextView mGiftCount; private TextView mGiftCount;
private TextView mGiftGroupCount; private TextView mGiftGroupCount;
private TextView mMulSign;//乘号 private TextView mMulSign;//乘号
private ImageView giftNamingIcon;
private int mDp214; private int mDp214;
private ObjectAnimator mAnimator; private ObjectAnimator mAnimator;
private Animation mAnimation;//礼物数字执行的放大动画 private Animation mAnimation;//礼物数字执行的放大动画
@ -73,6 +74,7 @@ public class LiveGiftViewHolder extends AbsViewHolder {
mGiftCount = (TextView) findViewById(R.id.gift_count); mGiftCount = (TextView) findViewById(R.id.gift_count);
mGiftGroupCount = (TextView) findViewById(R.id.gift_group_count); mGiftGroupCount = (TextView) findViewById(R.id.gift_group_count);
mMulSign = (TextView) findViewById(R.id.mul_sign); mMulSign = (TextView) findViewById(R.id.mul_sign);
giftNamingIcon = (ImageView) findViewById(R.id.gift_naming_icon);
mDp214 = DpUtil.dp2px(214); mDp214 = DpUtil.dp2px(214);
mHandler = new Handler() { mHandler = new Handler() {
@Override @Override
@ -186,7 +188,14 @@ public class LiveGiftViewHolder extends AbsViewHolder {
root_back.setBackgroundResource(R.drawable.background_naming); root_back.setBackgroundResource(R.drawable.background_naming);
findViewById(R.id.naming_icon).setVisibility(View.VISIBLE); findViewById(R.id.naming_icon).setVisibility(View.VISIBLE);
} else { } else {
if(bean.getUser_naming_status()==1){
giftNamingIcon.setVisibility(View.VISIBLE);
root_back.setBackgroundResource(R.mipmap.icon_live_gift_anim_11);
}else{
giftNamingIcon.setVisibility(View.GONE);
root_back.setBackgroundResource(R.mipmap.icon_live_gift_anim_3); root_back.setBackgroundResource(R.mipmap.icon_live_gift_anim_3);
}
//root_back.setBackgroundResource(R.mipmap.icon_live_gift_anim_3);
findViewById(R.id.naming_icon).setVisibility(View.GONE); findViewById(R.id.naming_icon).setVisibility(View.GONE);
} }
if (lian && mGiftCount != null && mAnimation != null) { if (lian && mGiftCount != null && mAnimation != null) {

View File

@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/gift_layout" android:id="@+id/gift_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="87dp" android:layout_height="87dp"
@ -11,7 +13,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -23,7 +24,6 @@
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="50dp" /> android:layout_height="50dp" />
<TextView <TextView
android:id="@+id/gift_name" android:id="@+id/gift_name"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -58,6 +58,45 @@
android:layout_height="11dp" android:layout_height="11dp"
android:layout_gravity="end" android:layout_gravity="end"
android:layout_marginEnd="2dp" /> android:layout_marginEnd="2dp" />
<LinearLayout
android:id="@+id/namingLayout"
android:layout_width="70dp"
android:background="@mipmap/item_frame_gift_naming_bg"
android:layout_height="20dp"
android:visibility="gone"
tools:visibility="visible"
android:layout_marginBottom="27dp"
android:layout_gravity="center_horizontal|bottom">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/avatar"
android:layout_width="20dp"
android:layout_height="20dp"
android:scaleType="centerCrop"
android:src="@drawable/m_chu_xia"
app:riv_oval="true" />
<com.yunbao.common.views.weight.MarqueeTextView
android:id="@+id/naming_name"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_gravity="center_vertical"
android:layout_marginStart="2dp"
android:layout_weight="1"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_vertical"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="#FFFFFFFF"
android:textSize="10sp" />
</LinearLayout>
</FrameLayout> </FrameLayout>
<LinearLayout <LinearLayout

View File

@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root" android:id="@+id/root"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="60dp" android:layout_height="60dp"
android:clipChildren="false" android:clipChildren="false"
tools:visibility="visible"
android:visibility="invisible"> android:visibility="invisible">
<View <View
@ -45,7 +47,7 @@
android:id="@+id/avatar" android:id="@+id/avatar"
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
android:layout_marginLeft="4dp" android:layout_marginLeft="10dp"
android:layout_marginRight="8dp" android:layout_marginRight="8dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
app:riv_oval="true" /> app:riv_oval="true" />
@ -119,4 +121,13 @@
android:text="@string/the_title_financier2" android:text="@string/the_title_financier2"
android:textColor="#DB7008" android:textColor="#DB7008"
android:textSize="10sp" /> android:textSize="10sp" />
<ImageView
android:layout_marginTop="10dp"
android:layout_marginStart="20dp"
android:id="@+id/gift_naming_icon"
android:src="@mipmap/gift_naming_icon"
android:layout_width="27dp"
android:layout_height="12dp"/>
</FrameLayout> </FrameLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB