新增主播任务对话框模块

This commit is contained in:
2023-02-17 17:14:01 +08:00
parent d86e16c9f5
commit 79ded6bff4
21 changed files with 779 additions and 9 deletions

View File

@@ -866,7 +866,7 @@ public abstract class LiveActivity extends AbsActivity implements SocketMessageL
private void showTaskDialog() {
final Dialog dialog = new Dialog(LiveActivity.this, com.yunbao.live.R.style.dialog);
dialog.setContentView(R.layout.dialog_task);
dialog.setContentView(R.layout.dialog_live_task);
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);

View File

@@ -0,0 +1,105 @@
package com.yunbao.live.adapter;
import android.content.Context;
import android.graphics.Color;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.bean.LiveTaskModel;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import java.util.List;
public class LiveTaskRecyclerAdapter extends RecyclerView.Adapter<LiveTaskRecyclerAdapter.TaskHolder> {
private Context mContext;
private List<LiveTaskModel> tasks;
public LiveTaskRecyclerAdapter(Context mContext) {
this.mContext = mContext;
}
public void setTasks(List<LiveTaskModel> tasks) {
this.tasks = tasks;
notifyDataSetChanged();
}
@NonNull
@Override
public TaskHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == LiveTaskModel.TASK_TYPE_TIP) {
return new TaskHolder(new TextView(mContext));
} else {
return new TaskHolder(LayoutInflater.from(mContext).inflate(R.layout.item_live_task, parent, false));
}
}
@Override
public int getItemViewType(int position) {
return tasks.get(position).getType();
}
@Override
public void onBindViewHolder(@NonNull TaskHolder holder, int position) {
holder.setDate(tasks.get(position));
}
@Override
public int getItemCount() {
return tasks.size();
}
public static class TaskHolder extends RecyclerView.ViewHolder {
private TextView title;
private TextView complete;
private TextView hot;
private TextView xp;
private ImageView hotIcon;
private ImageView xpIcon;
public TaskHolder(@NonNull View itemView) {
super(itemView);
if (itemView instanceof TextView) {
title = (TextView) itemView;
title.setTextColor(Color.parseColor("#B3B3B3"));
title.setTextSize(12);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.setMarginStart(DpUtil.dp2px(27));
params.setMargins(DpUtil.dp2px(27), DpUtil.dp2px(16), 0, DpUtil.dp2px(16));
title.setLayoutParams(params);
} else {
title = itemView.findViewById(R.id.item_task_title);
complete = itemView.findViewById(R.id.item_task_complete);
hot = itemView.findViewById(R.id.item_task_hot);
xp = itemView.findViewById(R.id.item_task_xp);
hotIcon = itemView.findViewById(R.id.item_task_hot_img);
xpIcon = itemView.findViewById(R.id.item_task_xp_img);
hotIcon.setImageResource(R.mipmap.dialog_task_hot);
xpIcon.setImageResource(R.mipmap.dialog_task_star);
}
}
public void setDate(LiveTaskModel task) {
title.setText(task.getTitle());
if (task.getType() == LiveTaskModel.TASK_TYPE_TIP) {
return;
}
complete.setText(task.isComplete() ? R.string.live_task_item_complete_true : R.string.live_task_item_complete_false);
complete.setBackgroundResource(task.isComplete() ? R.drawable.background_6cbe53 : R.drawable.background_595959);
hot.setText(Html.fromHtml("<font color='#B3B3B3'>"+ WordUtil.getString(R.string.live_task_item_hot) +"</font>&nbsp&nbsp<font color='#F09FC2'>" + task.getHot() + "</font>"));
xp.setText(Html.fromHtml("<font color='#B3B3B3'>"+WordUtil.getString(R.string.live_task_item_xp)+"</font>&nbsp&nbsp<font color='#FFF69F'>" + task.getXp() + "</font>"));
}
}
}

View File

@@ -0,0 +1,202 @@
package com.yunbao.live.dialog;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
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.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;
import com.lxj.xpopup.XPopup;
import com.yunbao.common.bean.LiveTaskModel;
import com.yunbao.common.dialog.AbsDialogPopupWindow;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R;
import com.yunbao.live.adapter.LiveTaskRecyclerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* 主播直播任务弹框
*/
public class LiveTaskDialog extends AbsDialogPopupWindow {
private TextView newStarTime;
private ImageView newStarImg;
private ImageView taskInfoImg;
private ImageView tipImg;
private TabLayout tabLayout;
private ViewPager2 viewPager;
private TabLayoutMediator mediator;
private Context mContext;
public LiveTaskDialog(Context context) {
super(context);
this.mContext = context;
}
@Override
public void buildDialog(XPopup.Builder builder) {
builder.enableDrag(false);
}
@Override
protected void onCreate() {
super.onCreate();
initView();
}
@Override
protected int getImplLayoutId() {
return R.layout.dialog_live_task;
}
private void initView() {
newStarTime = findViewById(R.id.task_new_star_time);
newStarImg = findViewById(R.id.live_task_banner1);
taskInfoImg = findViewById(R.id.live_task_banner2);
tipImg = findViewById(R.id.live_task_tip);
tabLayout = findViewById(R.id.live_task_menu);
viewPager = findViewById(R.id.live_task_viewpager);
newStarTime.setText("新秀主播時效截止至 2023/1/01 12:00");
initImgView();
initTabLayout();
}
private void initImgView() {
newStarImg.setImageResource(R.mipmap.dialog_task_new_star);
taskInfoImg.setImageResource(R.mipmap.dialog_task_info);
tipImg.setImageResource(R.mipmap.icon_guize);
tipImg.setOnClickListener(v -> new LiveTaskInfoDialog(mContext).showDialog());
}
private void initTabLayout() {
TabLayout.Tab liveTaskTag = tabLayout.newTab();
TabLayout.Tab userTaskTag = tabLayout.newTab();
liveTaskTag.setText(R.string.live_task_tab1);
userTaskTag.setText(R.string.live_task_tab2);
tabLayout.addTab(liveTaskTag);
tabLayout.addTab(userTaskTag);
viewPager.setAdapter(new FragmentStateAdapter(((AppCompatActivity) mContext).getSupportFragmentManager(), getLifecycle()) {
@Override
public int getItemCount() {
return 2;
}
@NonNull
@Override
public Fragment createFragment(int position) {
TaskFragment fragment = new TaskFragment();
Bundle bundle = new Bundle();
bundle.putInt("position", position);
fragment.setArguments(bundle);
return fragment;
}
});
mediator = new TabLayoutMediator(tabLayout, viewPager, true, new TabLayoutMediator.TabConfigurationStrategy() {
@Override
public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
if (position == 0) {
tab.setText(R.string.live_task_tab1);
} else {
tab.setText(R.string.live_task_tab2);
}
}
});
mediator.attach();
}
public static class TaskFragment extends Fragment {
private RecyclerView taskList;
private LiveTaskRecyclerAdapter adapter;
private List<LiveTaskModel> tasks;
private int position;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return new RecyclerView(getActivity());
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
this.position = getArguments().getInt("position", -1);
taskList = (RecyclerView) view;
initTaskList();
createTask();
}
private void initTaskList() {
adapter = new LiveTaskRecyclerAdapter(getContext());
taskList.setAdapter(adapter);
taskList.setLayoutManager(new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false));
}
private void createTask() {
tasks = new ArrayList<>();
for (int i = 0; i < 4; i++) {
LiveTaskModel model = new LiveTaskModel();
if (i == 0) {
model.setType(LiveTaskModel.TASK_TYPE_TIP);
model.setTitle(WordUtil.getString(R.string.live_task_no1));
} else {
model.setType(LiveTaskModel.TASK_TYPE_ITEM);
model.setTitle("开播测试标题");
}
model.setTask(30);
model.setXp(3000);
model.setHot(5000);
tasks.add(model);
}
for (int i = 0; i < 4; i++) {
LiveTaskModel model = new LiveTaskModel();
if (i == 0) {
model.setType(LiveTaskModel.TASK_TYPE_TIP);
model.setTitle(WordUtil.getString(R.string.live_task_no2));
} else {
model.setType(LiveTaskModel.TASK_TYPE_ITEM);
model.setTitle("PK测试标题");
}
model.setTask(30);
model.setXp(3000);
model.setHot(5000);
tasks.add(model);
}
adapter.setTasks(tasks);
}
}
}

View File

@@ -0,0 +1,34 @@
package com.yunbao.live.dialog;
import android.content.Context;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import com.lxj.xpopup.XPopup;
import com.yunbao.common.dialog.AbsDialogPopupWindow;
import com.yunbao.live.R;
public class LiveTaskInfoDialog extends AbsDialogPopupWindow {
public LiveTaskInfoDialog(@NonNull Context context) {
super(context);
}
@Override
protected int getImplLayoutId() {
return R.layout.dialog_live_task_info;
}
@Override
public void buildDialog(XPopup.Builder builder) {
}
@Override
protected void onCreate() {
super.onCreate();
ImageView back = findViewById(R.id.live_task_info_back);
back.setImageResource(R.mipmap.icon_back);
back.setOnClickListener(v -> dismiss());
}
}