add[主播端,整蛊礼物,待完成项完成]

This commit is contained in:
Martin 2024-06-12 16:44:46 +08:00
parent 0425b56106
commit f131fcf546
25 changed files with 287 additions and 19 deletions

View File

@ -1243,4 +1243,17 @@ public interface PDLiveApi {
@Query("to_uid")String toUid,
@Query("payload")String payload
);
/**
*
* @param anchor_id
* @param gift_id
* @return
*/
@GET("/api/public/?service=Prank.anchorClickFinish")
Observable<ResponseModel<List<BaseModel>>> anchorClickFinish(
@Query("anchor_id")String anchor_id,
@Query("gift_id")String gift_id
);
}

View File

@ -3189,6 +3189,31 @@ public class LiveNetManager {
}
public void anchorClickFinish(String mLiveId, String giftId, HttpCallback<List<BaseModel>>callback) {
API.get().pdLiveApi(mContext)
.anchorClickFinish(mLiveId, giftId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<List<BaseModel>>>() {
@Override
public void accept(ResponseModel<List<BaseModel>> listResponseModel) throws Exception {
if (callback != null) {
callback.onSuccess(listResponseModel.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();
}
public void updateFile(File file, HttpCallback<AvatarBean> callback) {
MultipartBody.Part uploadFile = createUploadFile(file);
API.get().pdLiveApi(mContext)

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="320dp" />
<solid android:color="#FD2D48" />
</shape>

View File

@ -182,10 +182,34 @@
android:gravity="center"
android:orientation="vertical">
<ImageView
<RelativeLayout
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/icon_zhenggu" />
android:layout_height="40dp">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@mipmap/icon_zhenggu" />
<TextView
android:id="@+id/red_menu"
android:layout_width="6dp"
android:layout_height="6dp"
android:layout_marginTop="5dp"
android:layout_alignParentEnd="true"
android:background="@drawable/live_room_menu_red"
android:gravity="center"
android:includeFontPadding="false"
android:minWidth="14dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="#fff"
android:textSize="10sp"
android:translationY="-4dp"
android:visibility="gone" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"

View File

@ -1499,4 +1499,5 @@
<string name="dragon_rule6">2.用戶關注主播並參與活動,將在倒計時五分鐘結束後瓜分活動金豆;</string>
<string name="dragon_rule7">3.此活動的最終解釋權歸PDLIVE所有。</string>
<string name="main_type_theater">短劇</string>
<string name="prank_complete">完成*1</string>
</resources>

View File

@ -1498,4 +1498,5 @@
<string name="dragon_rule6">2.用戶關注主播並參與活動,將在倒計時五分鐘結束後瓜分活動金豆;</string>
<string name="dragon_rule7">3.此活動的最終解釋權歸PDLIVE所有。</string>
<string name="main_type_theater">短劇</string>
<string name="prank_complete">完成*1</string>
</resources>

View File

@ -1495,5 +1495,6 @@
<string name="dragon_rule6">2.用戶關注主播並參與活動,將在倒計時五分鐘結束後瓜分活動金豆;</string>
<string name="dragon_rule7">3.此活動的最終解釋權歸PDLIVE所有。</string>
<string name="main_type_theater">短劇</string>
<string name="prank_complete">完成*1</string>
</resources>

View File

@ -1504,4 +1504,5 @@ Limited ride And limited avatar frame</string>
<string name="dragon_rule6">2.Users who follow the anchor and participate in the activity will divide the gold beans of the activity after the countdown of five minutes ends;</string>
<string name="dragon_rule7">3.The final interpretation of this activity belongs to PDLIVE.</string>
<string name="main_type_theater" >Theater</string>
<string name="prank_complete">once</string>
</resources>

View File

@ -27,6 +27,6 @@ ext {
//
isUploadLog : true,
//
isPluginModel : true,
isPluginModel : false,
]
}

View File

@ -300,8 +300,6 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
ToastUtil.show(mContext.getString(R.string.live_push_failed));
}
});
}
private void initFaceManager() {
@ -380,8 +378,17 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
case Constants.LIVE_FUNC_ZG://zg
// ToastUtil.show("開發中,敬請期待");
LivePrankDialogFragment fragment = new LivePrankDialogFragment();
fragment.setOnPrankResultListener(new LivePrankDialogFragment.onPrankResultListener() {
@Override
public void OpenAndCloseListener() {
if(mLiveRoomViewHolder!=null){
mLiveRoomViewHolder.initPrankProgress();
}
}
});
fragment.setmLiveUid(mLiveUid);
fragment.show(getSupportFragmentManager(), "LivePrankDialogFragment");
mLiveAnchorViewHolder.closeMenuRed();
break;
case Constants.LIVE_FUNC_MIC://語音
//ToastUtil.show("開發中,敬請期待");
@ -700,6 +707,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
bundle.putBoolean("isPk", isDRPK == 1 || PKing || mLivePushViewHolder.isPking());
bundle.putLong("liveTime", mLiveAnchorViewHolder.getmAnchorLiveTime());
bundle.putBoolean(Constants.OPEN_FLASH, mLivePushViewHolder != null && mLivePushViewHolder.isFlashOpen());
bundle.putBoolean("isShowZgRed",mLiveAnchorViewHolder.isShowMenuRed());
fragment.setArguments(bundle);
fragment.setFunctionClickListener(this);
fragment.show(getSupportFragmentManager(), "LiveFunctionDialogFragment");
@ -871,6 +879,10 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
getAiRobotStatus();
MicedUserManager.get().removeAllMicUserList();
MicUserManager.get().removeAllMicUserList();
//加载整蛊
if(mLiveRoomViewHolder!=null){
mLiveRoomViewHolder.initPrankProgress();
}
}
/**
@ -1454,7 +1466,9 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl
@Override
public void onUpdatePrankProgress(String prankString) {
if (mLiveRoomViewHolder != null){
mLiveRoomViewHolder.refreshPrank(prankString);
}
}

View File

@ -6,6 +6,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
@ -14,6 +15,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.bean.PrankProgressBean;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.MarqueeTextView;
import com.yunbao.live.R;
import com.yunbao.live.views.LiveRoomViewHolder;
@ -25,6 +27,8 @@ public class PrankAdapter extends RecyclerView.Adapter<PrankAdapter.MyViewHolder
private List<PrankProgressBean.PrankList> mList = new ArrayList<>();
private Context mContext;
private boolean isAn;
public PrankAdapter(Context context){
mContext = context;
}
@ -35,6 +39,13 @@ public class PrankAdapter extends RecyclerView.Adapter<PrankAdapter.MyViewHolder
notifyDataSetChanged();
}
public void showAnView(List<PrankProgressBean.PrankList> list,boolean isAn){
this.isAn = isAn;
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@ -54,6 +65,22 @@ public class PrankAdapter extends RecyclerView.Adapter<PrankAdapter.MyViewHolder
ImgLoader.display(mContext,data.getGift_icon(),holder.prank_item_icon);
holder.prank_item_progress.setMax(data.getGift_num());
holder.prank_item_progress.setProgress(data.getSend_num());
holder.an_prank_name.setText(WordUtil.isNewZh() ? data.getGift_name() : data.getGift_name_en());
holder.an_prank_remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemClickListener.onItemDel(data.getGift_id());
}
});
if(isAn){
holder.anLayout.setVisibility(View.VISIBLE);
holder.progressLayout.setVisibility(View.GONE);
holder.nameLayout.setVisibility(View.GONE);
}else{
holder.anLayout.setVisibility(View.GONE);
holder.progressLayout.setVisibility(View.VISIBLE);
holder.nameLayout.setVisibility(View.VISIBLE);
}
}
@Override
@ -65,6 +92,11 @@ public class PrankAdapter extends RecyclerView.Adapter<PrankAdapter.MyViewHolder
private TextView prank_item_subscript,prank_item_prank_name,prank_item_gift_name,prank_item_now_progress,prank_item_total_progress;
private ImageView prank_item_icon;
private ProgressBar prank_item_progress;
private LinearLayout anLayout;
private MarqueeTextView an_prank_name;
private TextView an_prank_remove;
private LinearLayout progressLayout;
private LinearLayout nameLayout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
prank_item_subscript = itemView.findViewById(R.id.prank_item_subscript);
@ -74,6 +106,13 @@ public class PrankAdapter extends RecyclerView.Adapter<PrankAdapter.MyViewHolder
prank_item_total_progress = itemView.findViewById(R.id.prank_item_total_progress);
prank_item_icon = itemView.findViewById(R.id.prank_item_icon);
prank_item_progress = itemView.findViewById(R.id.prank_item_progress);
nameLayout = itemView.findViewById(R.id.nameLayout);
progressLayout = itemView.findViewById(R.id.progressLayout);
//主播
anLayout = itemView.findViewById(R.id.anLayout);
an_prank_name = itemView.findViewById(R.id.an_prank_name);
an_prank_remove = itemView.findViewById(R.id.an_prank_remove);
}
}
@ -81,6 +120,8 @@ public class PrankAdapter extends RecyclerView.Adapter<PrankAdapter.MyViewHolder
public interface OnItemClickListener {
void onItemClick(View view,int giftId);
void onItemDel(int giftId);
}
public void addOnItemClickListener(OnItemClickListener onItemClickListener){

View File

@ -55,7 +55,10 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
private String liveUid;
private TextView red_menu;
// boolean isRy = false;
private boolean isShowRed;
@Override
protected int getLayoutId() {
return R.layout.dialog_live_new_function;
@ -96,6 +99,7 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
// isRy = bundle.getBoolean("isRy", false);
mAnchorLiveTime = bundle.getLong("liveTime");
liveUid = bundle.getString("liveUid");
isShowRed = bundle.getBoolean("isShowZgRed");
}
mWishView = findViewById(R.id.live_tool_wish);
mPrankView = findViewById(R.id.live_tool_prank);
@ -108,6 +112,7 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
mMicView = findViewById(R.id.live_tool_mic);
mRandomPk = findViewById(R.id.live_tool_random_pk);
mLiveTimeTextView = (TextView) findViewById(R.id.live_time);
red_menu = (TextView) findViewById(R.id.red_menu);
mWishView.setOnClickListener(this);
mPrankView.setOnClickListener(this);
mWksView.setOnClickListener(this);
@ -138,6 +143,7 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
mLiveRoomHandler = new LiveRoomHandler();
mLiveTimeTextView.setText(StringUtil.getDurationText(mAnchorLiveTime));
startAnchorLiveTime();
red_menu.setVisibility(isShowRed?View.VISIBLE:View.GONE);
}
public void setFunctionClickListener(LiveFunctionClickListener functionClickListener) {
@ -162,6 +168,7 @@ public class LiveNewFunctionDialogFragment extends AbsDialogFragment implements
mFunctionClickListener.onClick(LIVE_FUNC_WISHLIST);
} else if (id == R.id.live_tool_prank) {
mFunctionClickListener.onClick(LIVE_FUNC_ZG);
red_menu.setVisibility(View.GONE);
} else if (id == R.id.live_tool_wks) {
mFunctionClickListener.onClick(LIVE_FUNC_WKS);
} else if (id == R.id.live_tool_beauty) {

View File

@ -71,6 +71,12 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O
private Button mBtnAddGift;
private ImageView help;
private onPrankResultListener onPrankResultListener;
public void setOnPrankResultListener(LivePrankDialogFragment.onPrankResultListener onPrankResultListener) {
this.onPrankResultListener = onPrankResultListener;
}
public void setmLiveUid(String mLiveUid) {
this.mLiveUid = mLiveUid;
}
@ -226,7 +232,6 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O
} else {
setGiftBean(recyclerAdapter.getList());
}
}
});
ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.btn_clear), new ViewClicksAntiShake.ViewClicksCallBack() {
@ -414,6 +419,10 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O
} else {
ToastUtil.show("successful");
}
//通知主播刷新整蛊信息
if(onPrankResultListener!=null){
onPrankResultListener.OpenAndCloseListener();
}
}
@Override
@ -601,4 +610,8 @@ public class LivePrankDialogFragment extends AbsDialogFragment implements View.O
livePrankExplainDialog.showDialog();
}
}
public interface onPrankResultListener{
void OpenAndCloseListener();
}
}

View File

@ -296,8 +296,10 @@ public class SocketRyClient {
case Constants.PrankSendData:
//整蛊礼物刷新
L.e("整蛊礼物刷新 整蛊礼物刷新 整蛊礼物刷新");
if (map.getIntValue("action") == 13 && map.getString("msgtype").equals("4")){
String ctString = map.getString("ct");
L.e("整蛊礼物刷新 整蛊礼物刷新 整蛊礼物刷新 "+ctString);
JsonElement jsonElement = JsonParser.parseString(ctString);
if (jsonElement == null) break;
// LogUtils.e("yqw=====>整蛊礼物列表:"+ctString);

View File

@ -54,6 +54,9 @@ import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.reflect.TypeToken;
import com.lxj.xpopup.XPopup;
import com.makeramen.roundedimageview.RoundedImageView;
@ -66,6 +69,7 @@ import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity;
import com.yunbao.common.bean.PrankProgressBean;
import com.yunbao.common.utils.L;
import com.yunbao.common.utils.MobclickAgent;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants;
@ -406,12 +410,15 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
//整蛊进度列表功能
private View prank_group;
private TextView prank_group_title,prank_group_turntable;
public TextView prank_group_title,prank_group_turntable;
private RecyclerView recycler_prank;
private ImageView prank_group_bottom_icon,prank_group_turntable_icon,prank_small_icon;
private PrankAdapter prankAdapter;
private ComboAdapter comboAdapter;
private List<PrankProgressBean.PrankList> prankAndComboList = new ArrayList<>();
private JsonElement completedList = new JsonArray();
private boolean prankAnisShow;
public LiveRoomViewHolder setGuardType(int guardType) {
this.guardType = guardType;
@ -1650,10 +1657,21 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
prank_group_bottom_icon = (ImageView) findViewById(R.id.prank_group_bottom_icon);//收起icon
prank_group_turntable_icon = (ImageView) findViewById(R.id.prank_group_turntable_icon);//转盘图标
prank_small_icon = (ImageView) findViewById(R.id.prank_small_icon);//收起后图标
//点击文字转盘整蛊(跳转转盘整蛊)
prank_group_turntable.setOnClickListener(v->{
prankAnisShow = !prankAnisShow;
List<PrankProgressBean.PrankList> tempList = new ArrayList<>();
for (int i = 0; i <prankAndComboList.size(); i++) {
if(prankAndComboList.get(i).getCompleted_num()!=0){
tempList.add(prankAndComboList.get(i));
}
}
if(prankAnisShow){
prankAdapter.showAnView(tempList,prankAnisShow);
}else{
prankAdapter.showAnView(prankAndComboList,prankAnisShow);
}
L.e("prankAnisShow:"+prankAnisShow);
});
//点击收起
@ -1680,9 +1698,27 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
comboAdapter = new ComboAdapter(mContext);
//整蛊礼物点击
prankAdapter.addOnItemClickListener((view, giftId) -> {
// LogUtils.e("yqw=====>点击整蛊礼物:"+giftId);
openGiftDialog(String.valueOf(giftId));
prankAdapter.addOnItemClickListener(new PrankAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int giftId) {
openGiftDialog(String.valueOf(giftId));
}
@Override
public void onItemDel(int giftId) {
LiveNetManager.get(mContext).anchorClickFinish(mLiveUid, String.valueOf(giftId), new com.yunbao.common.http.base.HttpCallback<List<BaseModel>>() {
@Override
public void onSuccess(List<BaseModel> data) {
}
@Override
public void onError(String error) {
}
});
L.e("onItemDel:"+giftId);
}
});
//连击投票礼物点击
@ -1692,6 +1728,8 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
});
}
//初始化整蛊列表进度
public void initPrankProgress(){
// LogUtils.e("yqw=====>主播id:"+mLiveUid);
@ -1715,8 +1753,6 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
});
}
//刷新整蛊礼物列表
public void refreshPrank(String newPrankData){
try {
@ -1765,6 +1801,11 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis
sortByCompletionRate(prankAndComboList);
prankAdapter.setList(prankAndComboList);
recycler_prank.setAdapter(prankAdapter);
if(CommonAppConfig.getInstance().getUid().equals(mLiveUid)){
prank_group_turntable.setVisibility(View.VISIBLE);
}else{
prank_group_turntable.setVisibility(View.GONE);
}
}else {
sortBySendNum(prankAndComboList);
comboAdapter.setList(prankAndComboList);

View File

@ -85,6 +85,7 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
private TextView mLiveTimeTextView;//主播的直播时长
private long mAnchorLiveTime;//主播直播时间
private LiveRoomHandler mLiveRoomHandler;
private TextView menuRed;
public LiveRyAnchorViewHolder(Context context, ViewGroup parentView) {
super(context, parentView);
@ -187,6 +188,8 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
mLiveTimeTextView = (TextView) findViewById(R.id.live_time);
mLiveTimeTextView.setVisibility(View.VISIBLE);
mLiveRoomHandler = new LiveRoomHandler();
menuRed = (TextView) findViewById(R.id.red_menu);
}
private Map<String, String> yaoqing = new HashMap<>();
@ -649,4 +652,12 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder {
}
return now + time + -now % 1000;
}
public void closeMenuRed(){
menuRed.setVisibility(View.GONE);
}
public boolean isShowMenuRed(){
return menuRed.getVisibility()==View.VISIBLE;
}
}

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="5dp"/>
<solid android:color="#FFF6E1"/>
</shape>

View File

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

View File

@ -83,7 +83,7 @@
android:drawableEnd="@mipmap/ic_prank_gift_add_gift_to"
android:ems="10"
android:gravity="start|center"
android:hint="@string/diamonds_every_time_requirement_of_hint"
android:hint="@string/live_prank_gift_add_gift_select"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:singleLine="true"

View File

@ -20,7 +20,10 @@
android:textSize="8sp"/>
<LinearLayout
android:id="@+id/nameLayout"
android:layout_width="match_parent"
android:visibility="visible"
tools:visibility="gone"
android:layout_height="16dp"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
@ -63,9 +66,12 @@
</LinearLayout>
<LinearLayout
android:id="@+id/progressLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="3dp"
android:visibility="visible"
tools:visibility="gone"
android:layout_marginEnd="3dp"
android:orientation="horizontal">
@ -101,4 +107,39 @@
</LinearLayout>
<LinearLayout
android:id="@+id/anLayout"
android:layout_margin="5dp"
android:visibility="gone"
android:gravity="center_vertical"
tools:visibility="visible"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.yunbao.common.views.weight.MarqueeTextView
android:id="@+id/an_prank_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:fontFamily="sans-serif-condensed-medium"
android:textColor="@color/white"
android:textSize="8sp"
android:text="跳舞跳舞跳"/>
<TextView
android:id="@+id/an_prank_remove"
android:layout_width="20dp"
android:text="@string/prank_complete"
android:layout_marginLeft="5dp"
android:gravity="center"
android:paddingBottom="1dp"
android:textColor="#372B2B"
android:background="@drawable/bg_prank_an_once"
android:textSize="6dp"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>

View File

@ -2400,6 +2400,7 @@
<include
android:id="@+id/prank_group"
android:visibility="gone"
tools:visibility="visible"
layout="@layout/view_prank_group"/>
<ImageView

View File

@ -53,6 +53,7 @@
android:background="@drawable/bg_prank_bottom_detail"
android:visibility="gone"
android:padding="3dp"
tools:visibility="visible"
android:textSize="8sp"
android:ellipsize="end"
android:singleLine="true"

View File

@ -250,5 +250,24 @@
app:dt_left_drawable="@drawable/bg_push_time_point"
app:dt_left_height="4dp"
app:dt_left_width="4dp" />
<TextView
android:id="@+id/red_menu"
android:layout_width="6dp"
android:layout_height="6dp"
android:layout_alignTop="@id/btn_function"
android:layout_alignRight="@id/btn_function"
android:layout_marginTop="8dp"
android:layout_marginRight="8dp"
android:background="@drawable/live_room_menu_red"
android:gravity="center"
android:includeFontPadding="false"
android:minWidth="14dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:textColor="#fff"
android:textSize="10sp"
android:translationY="-4dp"
android:visibility="visible" />
</RelativeLayout>
</LinearLayout>

View File

@ -134,6 +134,7 @@
<string name="live_prank_gift_tips">You can add up to 6, and it is recommended to add 4.</string>
<string name="live_prank_gift_add_title">Add gift</string>
<string name="live_prank_gift_add_gift">Gift</string>
<string name="live_prank_gift_add_gift_select">Choose a gift</string>
<string name="live_prank_gift_add_gift_number">Quantity</string>
<string name="live_prank_gift_add_gift_number_select">Fill in the number</string>
<string name="live_prank_gift_add_gift_content">Content</string>

View File

@ -136,7 +136,7 @@
<string name="live_prank_gift_dialog_number_btn">+ 設置其他數量(最多9999)</string>
<string name="prank_progress">整蠱進度</string>
<string name="turntable_prank">轉盤整蠱</string>
<string name="turntable_prank">待完成整蠱</string>
<string name="details">詳情></string>
<string name="combo_vote">連擊投票</string>
<string name="combo_vote_more">連擊最多優先</string>