完成美颜UI 90%
This commit is contained in:
@@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user