package com.yunbao.faceunity.adapters; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.yunbao.common.utils.DpUtil; import com.yunbao.faceunity.R; import com.yunbao.faceunity.adapters.vh.AnimViewHolder; import com.yunbao.faceunity.adapters.vh.AnimojiViewHolder; import com.yunbao.faceunity.adapters.vh.BaseViewHolder; import com.yunbao.faceunity.adapters.vh.BeautyBodyViewHolder; import com.yunbao.faceunity.adapters.vh.BeautyShapeViewHolder; import com.yunbao.faceunity.adapters.vh.BeautySkinViewHolder; import com.yunbao.faceunity.adapters.vh.BigHeadViewHolder; import com.yunbao.faceunity.adapters.vh.FilterViewHolder; import com.yunbao.faceunity.adapters.vh.FineStickerViewHolder; import com.yunbao.faceunity.adapters.vh.MakeupCustomItemViewHolder; import com.yunbao.faceunity.adapters.vh.MakeupViewHolder; import com.yunbao.faceunity.adapters.vh.StickerViewHolder; import com.yunbao.faceunity.adapters.vh.StyleViewHolder; import com.yunbao.faceunity.data.AnimojiDataFactory; import com.yunbao.faceunity.data.BodyBeautyDataFactory; import com.yunbao.faceunity.data.FaceBeautyDataFactory; import com.yunbao.faceunity.data.FaceParam; import com.yunbao.faceunity.data.FineStickerDataFactory; import com.yunbao.faceunity.data.MakeupDataFactory; import com.yunbao.faceunity.data.PropDataFactory; import com.yunbao.faceunity.entity.BaseBean; import com.yunbao.faceunity.entity.PropBean; import com.yunbao.faceunity.seekbar.DiscreteSeekBar; import com.yunbao.faceunity.utils.FaceSPUtils; import java.util.ArrayList; import java.util.List; /** * 美颜配置适配器 */ public class ContainerRecyclerAdapter extends RecyclerView.Adapter { private Context mContext; private List list; public int selectPosition = -1; private FaceBeautyDataFactory faceBeautyDataFactory;//美颜工厂 private MakeupDataFactory makeupDataFactory;//美妆工厂 private BodyBeautyDataFactory bodyBeautyDataFactory;//美体工厂 private PropDataFactory propDataFactory;//道具业务工厂:道具贴图、AR面具、搞笑大头、表情识别、哈哈镜、手势识别 private AnimojiDataFactory animojiDataFactory;//Animoji工厂 private FineStickerDataFactory fineStickerDataFactory;//精品贴图 private DiscreteSeekBar seekBar; private float seekY = 0; public ContainerRecyclerAdapter(Context mContext) { this.mContext = mContext; initDataFactory(); } public void setSeekBar(DiscreteSeekBar seekBar) { this.seekBar = seekBar; } public DiscreteSeekBar getSeekBar() { return seekBar; } public void showSeekBar() { if (seekBar.getVisibility() == View.VISIBLE) { return; } seekBar.setVisibility(View.VISIBLE); if (seekY == 0) { seekY = seekBar.getY() - DpUtil.dp2px(20); } seekBar.setY(seekY); } public void hideSeekBar() { if (seekBar.getVisibility() == View.INVISIBLE) { return; } seekBar.setOnProgressChangeListener(null); seekBar.setVisibility(View.INVISIBLE); } private void initDataFactory() { faceBeautyDataFactory = new FaceBeautyDataFactory(new FaceBeautyDataFactory.FaceBeautyListener() { @Override public void onFilterSelected(int res) { } @Override public void onFaceBeautyEnable(boolean enable) { } }); propDataFactory = new PropDataFactory(new PropDataFactory.PropListener() { @Override public void onItemSelected(PropBean bean) { } }, 0, 0); animojiDataFactory = new AnimojiDataFactory(0, 0); makeupDataFactory = new MakeupDataFactory(0); bodyBeautyDataFactory = new BodyBeautyDataFactory(); bodyBeautyDataFactory.bindCurrentRenderer(); } public void setList(ArrayList list) { this.list = list; this.selectPosition = -1; hideSeekBar(); } public int getSelectPosition() { return selectPosition; } public void setSelectPosition(int selectPosition) { this.selectPosition = selectPosition; notifyDataSetChanged(); } public FaceBeautyDataFactory getFaceBeautyDataFactory() { return faceBeautyDataFactory; } public MakeupDataFactory getMakeupDataFactory() { return makeupDataFactory; } public BodyBeautyDataFactory getBodyBeautyDataFactory() { return bodyBeautyDataFactory; } public PropDataFactory getPropDataFactory() { return propDataFactory; } public AnimojiDataFactory getAnimojiDataFactory() { return animojiDataFactory; } BaseViewHolder vh = null; @NonNull @Override public BaseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { LayoutInflater from = LayoutInflater.from(mContext); switch (viewType) { case FaceParam.FACE_BEAUTY_SKIN: vh = new BeautySkinViewHolder(from.inflate(R.layout.list_item_face_config, parent, false)); break; case FaceParam.FACE_BEAUTY_SHAPE: vh = new BeautyShapeViewHolder(from.inflate(R.layout.list_item_face_config, parent, false)); break; case FaceParam.FACE_BEAUTY_BODY: vh = new BeautyBodyViewHolder(from.inflate(R.layout.list_item_face_config, parent, false)); break; case FaceParam.FACE_BEAUTY_FILTER: vh = new FilterViewHolder(from.inflate(R.layout.list_item_face_config_filter, parent, false)); break; case FaceParam.FACE_MAKEUP: vh = new MakeupViewHolder(from.inflate(R.layout.list_item_face_config_filter, parent, false)); break; case FaceParam.FACE_BEAUTY_STYLE: vh = new StyleViewHolder(from.inflate(R.layout.list_item_face_config_style, parent, false)); break; case FaceParam.FACE_ANIMOJI: vh = new AnimojiViewHolder(from.inflate(R.layout.list_item_face_config_big_head, parent, false)); break; case FaceParam.FACE_ANIM: vh = new AnimViewHolder(from.inflate(R.layout.list_item_face_config_big_head, parent, false)); break; case FaceParam.FACE_STICKER: vh = new StickerViewHolder(from.inflate(R.layout.list_item_face_config_big_head, parent, false)); break; case FaceParam.FACE_BIG_HEAD: vh = new BigHeadViewHolder(from.inflate(R.layout.list_item_face_config_big_head, parent, false)); break; case FaceParam.FACE_FINE_STICKER: case FaceParam.FACE_FINE_STICKER_MIDDLE: case FaceParam.FACE_FINE_STICKER_HIGH: case FaceParam.FACE_FINE_STICKER_GAME: vh = new FineStickerViewHolder(from.inflate(R.layout.list_item_face_config_fine_sticker, parent, false)); break; case FaceParam.FACE_MAKEUP_TYPE_FOUNDATION: case FaceParam.FACE_MAKEUP_TYPE_LIP_STICK: case FaceParam.FACE_MAKEUP_TYPE_BLUSHER: case FaceParam.FACE_MAKEUP_TYPE_EYE_BROW: case FaceParam.FACE_MAKEUP_TYPE_EYE_SHADOW: case FaceParam.FACE_MAKEUP_TYPE_EYE_LINER: case FaceParam.FACE_MAKEUP_TYPE_EYE_LASH: case FaceParam.FACE_MAKEUP_TYPE_HIGH_LIGHT: case FaceParam.FACE_MAKEUP_TYPE_SHADOW: case FaceParam.FACE_MAKEUP_TYPE_EYE_PUPIL: vh = new MakeupCustomItemViewHolder(from.inflate(R.layout.list_item_face_config_filter, parent, false)); break; default: vh = new BeautySkinViewHolder(LayoutInflater.from(mContext).inflate(R.layout.list_item_face_config, parent, false)); } vh.adapter = this; return vh; } @Override public int getItemViewType(int position) { return list.get(position).getBeanType(); } @Override public int getItemCount() { return list.size(); } @Override public void onBindViewHolder(@NonNull BaseViewHolder holder, int position) { holder.setData(list.get(position)); } /** * 保存配置 */ public void save(String key, String data) { FaceSPUtils.getInstance().saveString(key, data); } /** * 读取配置 */ public String getString(String key) { return FaceSPUtils.getInstance().getString(key); } /** * 删除配置 */ public void del(String key) { FaceSPUtils.getInstance().del(key); } /** * 恢复默认设置 */ public void reset() { if (vh != null) { vh.reset(list); } } }