完成美颜UI 90%

This commit is contained in:
2022-09-20 18:29:05 +08:00
parent c634d29e79
commit d1d31da6be
136 changed files with 5028 additions and 305 deletions

View File

@@ -3,33 +3,53 @@ package com.yunbao.faceunity.ui;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.tabs.TabLayout;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.faceunity.R;
import com.yunbao.faceunity.checkbox.CheckGroup;
import com.yunbao.faceunity.control.BodyBeautyControlView;
import com.yunbao.faceunity.control.FaceBeautyControlView;
import com.yunbao.faceunity.control.MakeupControlView;
import com.yunbao.faceunity.control.PropControlView;
import com.yunbao.faceunity.adapters.ContainerRecyclerAdapter;
import com.yunbao.faceunity.adapters.MenuGroupRecyclerAdapter;
import com.yunbao.faceunity.data.FaceParam;
import com.yunbao.faceunity.data.FaceUnityDataFactory;
import com.yunbao.faceunity.entity.BaseBean;
import com.yunbao.faceunity.entity.FineStickerDataFactory;
import com.yunbao.faceunity.entity.FunctionEnum;
import com.yunbao.faceunity.entity.MenuGroupBean;
import com.yunbao.faceunity.entity.net.FineStickerEntity;
import com.yunbao.faceunity.entity.net.FineStickerTagEntity;
import com.yunbao.faceunity.repo.AnimojiSource;
import com.yunbao.faceunity.repo.BodyBeautySource;
import com.yunbao.faceunity.repo.FaceBeautySource;
import com.yunbao.faceunity.repo.MakeupSource;
import com.yunbao.faceunity.repo.PropSource;
import com.yunbao.faceunity.utils.net.StickerDownloadHelper;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* DESC
* Created on 2021/4/26
*/
public class FaceUnityView extends LinearLayout {
public class FaceUnityView extends LinearLayout implements StickerDownloadHelper.Callback {
private Context mContext;
private RecyclerView menuGroup;
private RecyclerView containerRecycler;
private ContainerRecyclerAdapter containerAdapter;
private TabLayout tabLayout;
private TextView title;
private LinearLayout menu2, diy, reset, menu2Reset;
private ImageView menu2Back, back, close;
public FaceUnityView(Context context) {
super(context);
@@ -50,20 +70,11 @@ public class FaceUnityView extends LinearLayout {
}
private FaceUnityDataFactory mDataFactory;
private CheckGroup mCheckGroupView;//底部菜单
private FaceBeautyControlView mFaceBeautyControlView;//美颜菜单
private MakeupControlView mMakeupControlView;//美妆菜单
private PropControlView mPropControlView;//道具菜单
private BodyBeautyControlView mBodyBeautyControlView;//美体菜单
private View lineView;//分割线
private void init() {
LayoutInflater.from(mContext).inflate(R.layout.layout_faceunity, this);
initView();
bindBottomView();
FineStickerDataFactory.getInstance().setCallback(this);
}
/**
@@ -72,7 +83,6 @@ public class FaceUnityView extends LinearLayout {
* @param dataFactory FaceUnityDataFactory
*/
public void bindDataFactory(FaceUnityDataFactory dataFactory) {
mDataFactory = dataFactory;
}
@@ -80,8 +90,28 @@ public class FaceUnityView extends LinearLayout {
* 初始化View
*/
private void initView() {
menuGroup=findViewById(R.id.menu_group);
menuGroup = findViewById(R.id.menu_group);
containerRecycler = findViewById(R.id.menu2_container_view);
tabLayout = findViewById(R.id.menu2_tab);
title = findViewById(R.id.menu_title);
menu2 = findViewById(R.id.layout_faceunity_menu2);
back = findViewById(R.id.menu_back);
menu2Back = findViewById(R.id.menu2_back);
close = findViewById(R.id.menu_close);
reset = findViewById(R.id.menu_reset);
menu2Reset = findViewById(R.id.menu2_reset);
initMenuGroup();
setContainerRecycler(new ArrayList<>());
initViewClick();
}
private void initViewClick(){
menu2Back.setOnClickListener(v -> goBackMainMenu());
}
private void goBackMainMenu(){
setContainerRecycler(new ArrayList<>());
menu2.setVisibility(GONE);
menuGroup.setVisibility(VISIBLE);
}
@@ -100,17 +130,190 @@ public class FaceUnityView extends LinearLayout {
private void showFunction(int index) {
}
private void initMenuGroup(){
menuGroup.setLayoutManager(new GridLayoutManager(mContext,4));
Map<Integer,Integer> layoutItem=new HashMap<>();
layoutItem.put(R.string.home_function_name_beauty,R.mipmap.ico_home_beauty);
layoutItem.put(R.string.home_function_name_makeup,R.mipmap.ico_home_makeup);
layoutItem.put(R.string.home_function_name_beauty_body,R.mipmap.ico_home_beauty_body);
layoutItem.put(R.string.home_function_name_beauty_body,R.mipmap.ico_home_beauty_body);
layoutItem.put(R.string.home_function_name_big_head,R.mipmap.ico_home_big_head);
layoutItem.put(R.string.home_function_name_animoji,R.mipmap.ico_home_animoji);
layoutItem.put(R.string.home_function_name_sticker,R.mipmap.ico_home_sticker);
layoutItem.put(R.string.home_function_name_fine_sticker,R.mipmap.ico_home_fine_sticker);
private void initMenuGroup() {
MenuGroupRecyclerAdapter adapter = new MenuGroupRecyclerAdapter(mContext);
menuGroup.setLayoutManager(new GridLayoutManager(mContext, 4));
List<MenuGroupBean> layoutItem = new ArrayList<>();
layoutItem.add(new MenuGroupBean(R.string.home_function_name_beauty, R.mipmap.ico_home_beauty));
layoutItem.add(new MenuGroupBean(R.string.home_function_name_makeup, R.mipmap.ico_home_makeup));
layoutItem.add(new MenuGroupBean(R.string.home_function_name_beauty_body, R.mipmap.ico_home_beauty_body));
layoutItem.add(new MenuGroupBean(R.string.home_function_name_big_head, R.mipmap.ico_home_big_head));
layoutItem.add(new MenuGroupBean(R.string.home_function_name_animoji, R.mipmap.ico_home_animoji));
layoutItem.add(new MenuGroupBean(R.string.home_function_name_sticker, R.mipmap.ico_home_sticker));
layoutItem.add(new MenuGroupBean(R.string.home_function_name_fine_sticker, R.mipmap.ico_home_fine_sticker));
adapter.setList(layoutItem);
adapter.setOnItemClickListener(position -> {
LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>();
title.setVisibility(GONE);
switch (position) {
case 0:
map.put(R.string.beauty_radio_skin_beauty, FaceParam.FACE_BEAUTY_SKIN);
map.put(R.string.beauty_radio_face_shape, FaceParam.FACE_BEAUTY_SHAPE);
map.put(R.string.beauty_radio_filter, FaceParam.FACE_BEAUTY_FILTER);
map.put(R.string.beauty_radio_style, FaceParam.FACE_BEAUTY_STYLE);
setContainerRecycler(FaceBeautySource.buildSkinParams());
break;
case 1:
title.setText(R.string.home_function_name_makeup);
title.setVisibility(VISIBLE);
changeRecyclerItemCount(5);
setContainerRecycler(MakeupSource.buildCombinations());
break;
case 2:
title.setText(R.string.home_function_name_beauty_body);
title.setVisibility(VISIBLE);
changeRecyclerItemCount(2);
setContainerRecycler(BodyBeautySource.buildBodyBeauty());
break;
case 3:
changeRecyclerItemCount(5);
setContainerRecycler(PropSource.buildPropBeans(FunctionEnum.BIG_HEAD));
break;
case 4:
changeRecyclerItemCount(5);
map.put(R.string.animoji_filter, FaceParam.FACE_ANIMOJI);
map.put(R.string.cartoon_filter, FaceParam.FACE_ANIM);
setContainerRecycler(AnimojiSource.buildAnimojis());
break;
case 5:
changeRecyclerItemCount(5);
setContainerRecycler(PropSource.buildPropBeans(FunctionEnum.STICKER));
break;
case 6:
List<FineStickerTagEntity> tagList = FineStickerDataFactory.getInstance().loadTagList();
if (!tagList.isEmpty()) {
setTab(createTabs(tagList));
}
break;
}
setTab(createTabs(map));
menuGroup.setVisibility(GONE);
menu2.setVisibility(VISIBLE);
});
menuGroup.setAdapter(adapter);
}
private List<TabLayout.Tab> createTabs(Map<Integer, Integer> map) {
List<TabLayout.Tab> list = new ArrayList<>();
for (Integer key : map.keySet()) {
TabLayout.Tab tab = tabLayout.newTab().setText(key);
tab.setTag(map.get(key));
list.add(tab);
}
return list;
}
private List<TabLayout.Tab> createTabs(List<FineStickerTagEntity> tags) {
List<TabLayout.Tab> list = new ArrayList<>();
for (FineStickerTagEntity tag : tags) {
TabLayout.Tab tab;
if (WordUtil.isZh()) {
tab = tabLayout.newTab().setText(tag.getTag().split("/")[0]);
} else {
tab = tabLayout.newTab().setText(tag.getTag().split("/")[1]);
}
tab.setTag(tag);
list.add(tab);
}
return list;
}
private void setTab(List<TabLayout.Tab> tabs) {
tabLayout.removeAllTabs();
for (TabLayout.Tab tab : tabs) {
tabLayout.addTab(tab);
}
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
Object tabTag = tab.getTag();
if (tabTag instanceof Integer) {
switch ((int) tab.getTag()) {
case FaceParam.FACE_BEAUTY_SKIN:
changeRecyclerItemCount(2);
setContainerRecycler(FaceBeautySource.buildSkinParams());
break;
case FaceParam.FACE_BEAUTY_SHAPE:
changeRecyclerItemCount(2);
setContainerRecycler(FaceBeautySource.buildShapeParams());
break;
case FaceParam.FACE_BEAUTY_FILTER:
changeRecyclerItemCount(5);
setContainerRecycler(FaceBeautySource.buildFilters());
break;
case FaceParam.FACE_BEAUTY_STYLE:
changeRecyclerItemCount(5);
setContainerRecycler(FaceBeautySource.buildStylesParams());
break;
case FaceParam.FACE_ANIMOJI:
changeRecyclerItemCount(5);
setContainerRecycler(AnimojiSource.buildAnimojis());
break;
case FaceParam.FACE_ANIM:
changeRecyclerItemCount(5);
setContainerRecycler(AnimojiSource.buildFilters());
break;
default:
setContainerRecycler(new ArrayList<>());
}
} else if (tabTag instanceof FineStickerTagEntity) {
FineStickerTagEntity tag = (FineStickerTagEntity) tabTag;
FineStickerEntity sticker = FineStickerDataFactory.getInstance().loadStickerList(tag);
ArrayList<FineStickerEntity.DocsBean> list = new ArrayList<>();
FineStickerEntity.DocsBean docsBean = new FineStickerEntity.DocsBean();
docsBean.set_id("-1");
list.add(docsBean);
list.addAll(sticker.getDocs());
changeRecyclerItemCount(5);
setContainerRecycler(list);
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void changeRecyclerItemCount(int count) {
containerRecycler.setLayoutManager(new GridLayoutManager(mContext, count));
}
private void setContainerRecycler(ArrayList<? extends BaseBean> list) {
if (containerAdapter == null) {
containerAdapter = new ContainerRecyclerAdapter(mContext);
containerRecycler.setLayoutManager(new GridLayoutManager(mContext, 2));
containerRecycler.setAdapter(containerAdapter);
}
containerAdapter.setList(list);
containerAdapter.notifyDataSetChanged();
}
@Override
public void onGetTags(String[] tags) {
List<FineStickerTagEntity> list = FineStickerDataFactory.formatTag(tags);
setTab(createTabs(list));
}
@Override
public void onGetList(String tag, FineStickerEntity fineSticker) {
}
@Override
public void onDownload(FineStickerEntity.DocsBean entity) {
}
@Override
public void onDownloadError(FineStickerEntity.DocsBean entity, String msg) {
}
}

View File

@@ -1,17 +0,0 @@
package com.yunbao.faceunity.ui.fragments;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
import com.yunbao.faceunity.dialog.BaseDialogFragment;
public class FaceContainerFragment extends BaseDialogFragment {
@Override
protected View createDialogView(LayoutInflater inflater, @Nullable ViewGroup container) {
return new LinearLayout(inflater.getContext());
}
}