259 lines
8.9 KiB
Java
259 lines
8.9 KiB
Java
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);
|
||
}
|
||
}
|
||
|
||
}
|