Files
pdlivexp/FaceUnity/src/main/java/com/yunbao/faceunity/adapters/ContainerRecyclerAdapter.java

259 lines
8.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<BaseViewHolder> {
private Context mContext;
private List<? extends BaseBean> 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<? extends BaseBean> 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);
}
}
}