ykj 3 years ago
parent 0a674a4022
commit aba6a2d497

@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties

@ -0,0 +1,3 @@
# 默认忽略的文件
/shelf/
/workspace.xml

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
</component>
</project>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -0,0 +1 @@
/build

@ -0,0 +1,55 @@
plugins {
id 'com.android.application'
}
android {
namespace 'com.example.orangesale_02'
compileSdk 33
defaultConfig {
applicationId "com.example.orangesale_02"
minSdk 21
targetSdk 33
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.databinding:databinding-runtime:7.1.2'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
implementation 'com.github.yijiebuyi:3DWheelPicker:v1.2.0' //
//Gson
implementation 'com.google.code.gson:gson:2.8.6'
//
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
//
implementation 'io.github.scwang90:refresh-layout-kernel:2.0.5' //core
implementation 'io.github.scwang90:refresh-header-classics:2.0.5' //
implementation 'se.emilsjolander:stickylistheaders:2.7.0'
}

@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

@ -0,0 +1,26 @@
package com.example.orangesale_02;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.orangesale_02", appContext.getPackageName());
}
}

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.OrangeSale_02"
tools:targetApi="31">
<activity
android:name=".activity.UserActivity"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".fragment.BottomBar_profile"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".fragment.BottomBar_cart"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".fragment.BottomBar_product"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".fragment.BottomBar_shouye"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".activity.IndexActivity"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".activity.RegisterActivity"
android:exported="false">
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
<activity
android:name=".activity.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>

@ -0,0 +1,67 @@
package com.example.orangesale_02;
import com.wheelpicker.widget.PickString;
import java.util.List;
/**
*
*/
public class AdministrativeMap {
public int year;
public List<com.wheelpicker.AdministrativeMap.Province> provinces;
/**
*
*/
public static class Province implements PickString {
public String name;
public String code;
public List<com.wheelpicker.AdministrativeMap.City> city;
@Override
public String pickDisplayName() {
return name;
}
}
/**
*
*/
public static class City implements PickString{
public String name;
public String code;
public List<com.wheelpicker.AdministrativeMap.Area> areas;
@Override
public String pickDisplayName() {
return name;
}
}
/**
*
*/
public static class Area implements PickString{
public String name;
public String code;
public List<com.wheelpicker.AdministrativeMap.Country> countries;
@Override
public String pickDisplayName() {
return name;
}
}
/**
*
*/
public static class Country implements PickString{
public String name;
public String code;
@Override
public String pickDisplayName() {
return name;
}
}
}

@ -0,0 +1,130 @@
package com.example.orangesale_02.CustomLayout;
import android.app.Activity;
import android.content.Context;
import android.graphics.Point;
import android.view.Display;
import android.view.WindowManager;
public class DPIUtil {
private static float mDensity = 160.0F;
private static Display defaultDisplay;
private static Point outSize = null;
public DPIUtil() {
}
public static void setDensity(float var0) {
mDensity = var0;
}
public static float getDensity() {
return mDensity;
}
public static Display getDefaultDisplay(Context var0) {
if (null == defaultDisplay) {
WindowManager var1 = (WindowManager)var0.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
defaultDisplay = var1.getDefaultDisplay();
}
return defaultDisplay;
}
public static int dip2px(float var0) {
return (int)(var0 * mDensity + 0.5F);
}
public static int px2dip(float var0) {
return (int)(var0 / mDensity + 0.5F);
}
public static int getWidth(Context var0) {
if (outSize == null) {
Class var1 = DPIUtil.class;
synchronized(DPIUtil.class) {
if (outSize == null) {
getPxSize(var0);
}
}
}
return outSize.x;
}
public static int getAppWidth(Activity var0) {
if (var0 != null) {
try {
Point var5 = new Point();
var0.getWindowManager().getDefaultDisplay().getSize(var5);
return var5.x;
} catch (Exception var4) {
var4.printStackTrace();
}
}
if (outSize == null) {
Class var1 = DPIUtil.class;
synchronized(DPIUtil.class) {
if (outSize == null) {
getPxSize(var0.getApplicationContext());
}
}
}
return outSize.x;
}
public static int getHeight(Context var0) {
Display var1 = getDefaultDisplay(var0);
Point var2 = new Point();
var1.getSize(var2);
return var2.y;
}
public static int getAppHeight(Activity var0) {
if (var0 != null) {
try {
Point var5 = new Point();
var0.getWindowManager().getDefaultDisplay().getSize(var5);
return var5.y;
} catch (Exception var4) {
var4.printStackTrace();
}
}
if (outSize == null) {
Class var1 = DPIUtil.class;
synchronized(DPIUtil.class) {
if (outSize == null && var0 != null) {
getPxSize(var0.getApplicationContext());
}
}
}
return outSize.y;
}
public static int px2sp(Context var0, float var1) {
float var2 = var0.getResources().getDisplayMetrics().scaledDensity;
return (int)(var1 / var2 + 0.5F);
}
public static int sp2px(Context var0, float var1) {
float var2 = var0.getResources().getDisplayMetrics().scaledDensity;
return (int)((var1 - 0.5F) * var2);
}
public static int dip2px(Context var0, float var1) {
float var2 = var0.getResources().getDisplayMetrics().density;
return (int)(var1 * var2 + 0.5F);
}
public static void getPxSize(Context var0) {
Display var1 = getDefaultDisplay(var0);
outSize = new Point();
var1.getSize(outSize);
}
}

@ -0,0 +1,408 @@
package com.example.orangesale_02.CustomLayout;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager.widget.ViewPager;
/**
*
*/
public class LeftSlideView extends LinearLayout {
public static final String TAG = "LeftSlideView"; //tag
private final Context mContext;
private int mTouchSlop;//最小触摸距离
private int mRightCanSlide; //右边可滑动距离
private float mInitX;//按下x
private float mInitY;//按下y
private ValueAnimator mValueAnimator;//属性动画
private final int mAnimDuring = 200;//动画时长
private final int mDelLength = 76;//删除按钮的长度
private ViewPager mViewPager;
private RecyclerView mRecyclerView;
private CardView mCardView;
private boolean isReCompute = true;
private OnDelViewStatusChangeLister mStatusChangeLister;//状态监听
/************************************ View *********************************************/
public LeftSlideView(Context context) {
super(context);
this.mContext = context;
init();
}
/**
*
*/
private void init() {
mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
mRightCanSlide = DPIUtil.dip2px(mContext, mDelLength);
setBackgroundColor(Color.TRANSPARENT);
// 水平布局
setOrientation(LinearLayout.HORIZONTAL);
initView();
}
/**
* View
*/
private void initView() {
}
/**
*
*/
public void addContentView(View contentView) {
//内容区域View
contentView.setTag("contentView");
View cv = findViewWithTag("contentView");
if (cv != null) {
this.removeView(cv);
}
LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
this.addView(contentView, layoutParams);
}
/**
*
*/
public void addMenuView(View menuView) {
//菜单区域View
menuView.setTag("menuView");
View mv = findViewWithTag("menuView");
if (mv != null) {
this.removeView(mv);
}
LayoutParams layoutParams = new LayoutParams(mRightCanSlide, ViewGroup.LayoutParams.MATCH_PARENT);
this.addView(menuView, layoutParams);
}
/**
* Viewpager
*/
public void setViewPager(ViewPager viewPager) {
mViewPager = viewPager;
}
/**
* RecyclerView
*/
public void setRecyclerView(RecyclerView recyclerView) {
mRecyclerView = recyclerView;
}
/** 设置CardView */
public void setCardView(CardView cardView) {
mCardView = cardView;
}
/*
********************************** ********************************************
*/
/**
*
*
* RecyclerView
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int actionMasked = ev.getActionMasked();
Log.e(TAG, "onInterceptTouchEvent: actionMasked = " + actionMasked);
switch (actionMasked) {
case MotionEvent.ACTION_DOWN:
mInitX = ev.getRawX() + getScrollX();
mInitY = ev.getRawY();
clearAnim();
if (mViewPager != null) {
mViewPager.requestDisallowInterceptTouchEvent(true);
}
if (mCardView != null) {
mCardView.requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_MOVE:
if (mInitX - ev.getRawX() < 0) {
// 让父级容器拦截
if (mRecyclerView != null && isReCompute) {
mRecyclerView.requestDisallowInterceptTouchEvent(false);
isReCompute = false;
}
// 阻止ViewPager拦截事件
if (mViewPager != null) {
mViewPager.requestDisallowInterceptTouchEvent(true);
}
return false;
}
// y轴方向上达到滑动最小距离, x 轴未达到
if (Math.abs(ev.getRawY() - mInitY) >= mTouchSlop
&& Math.abs(ev.getRawY() - mInitY) > Math.abs(mInitX - ev.getRawX() - getScrollX())) {
// 让父级容器拦截
if (mRecyclerView != null && isReCompute) {
mRecyclerView.requestDisallowInterceptTouchEvent(false);
isReCompute = false;
}
return false;
}
// x轴方向达到了最小滑动距离y轴未达到
if (Math.abs(mInitX - ev.getRawX() - getScrollX()) >= mTouchSlop
&& Math.abs(ev.getRawY() - mInitY) <= Math.abs(mInitX - ev.getRawX() - getScrollX())) {
// 阻止父级容器拦截
if (mRecyclerView != null && isReCompute) {
mRecyclerView.requestDisallowInterceptTouchEvent(true);
isReCompute = false;
}
return true;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (mRecyclerView != null) {
mRecyclerView.requestDisallowInterceptTouchEvent(false);
isReCompute = true;
}
break;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
/**
*
*
*
*/
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent ev) {
int actionMasked = ev.getActionMasked();
switch (actionMasked) {
case MotionEvent.ACTION_DOWN:
mInitX = ev.getRawX() + getScrollX();
mInitY = ev.getRawY();
clearAnim();
if (mViewPager != null) {
mViewPager.requestDisallowInterceptTouchEvent(true);
}
if (mCardView != null) {
mCardView.requestDisallowInterceptTouchEvent(true);
}
break;
case MotionEvent.ACTION_MOVE:
if (mInitX - ev.getRawX() < 0) {
// 让父级容器拦截
if (mRecyclerView != null && isReCompute) {
mRecyclerView.requestDisallowInterceptTouchEvent(false);
isReCompute = false;
}
// 阻止ViewPager拦截事件
if (mViewPager != null) {
mViewPager.requestDisallowInterceptTouchEvent(true);
isReCompute = false;
}
}
// y轴方向上达到滑动最小距离, x 轴未达到
if (Math.abs(ev.getRawY() - mInitY) >= mTouchSlop
&& Math.abs(ev.getRawY() - mInitY) > Math.abs(mInitX - ev.getRawX() - getScrollX())) {
// 让父级容器拦截
if (mRecyclerView != null && isReCompute) {
mRecyclerView.requestDisallowInterceptTouchEvent(false);
isReCompute = false;
}
}
// x轴方向达到了最小滑动距离y轴未达到
if (Math.abs(mInitX - ev.getRawX() - getScrollX()) >= mTouchSlop
&& Math.abs(ev.getRawY() - mInitY) <= Math.abs(mInitX - ev.getRawX() - getScrollX())) {
// 阻止父级容器拦截
if (mRecyclerView != null && isReCompute) {
mRecyclerView.requestDisallowInterceptTouchEvent(true);
isReCompute = false;
}
}
// 如果手指移动距离超过最小距离
float translationX = mInitX - ev.getRawX();
// 如果滑动距离已经大于右边可伸缩的距离后, 应该重新设置initx
if (translationX > mRightCanSlide) {
mInitX = ev.getRawX() + mRightCanSlide;
}
// 如果互动距离小于0那么重新设置初始位置initx
if (translationX < 0) {
mInitX = ev.getRawX();
}
translationX = translationX > mRightCanSlide ? mRightCanSlide : translationX;
translationX = translationX < 0 ? 0 : translationX;
// 向左滑动
if (translationX <= mRightCanSlide && translationX >= 0) {
scrollTo((int) translationX, 0);
return true;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
if (mRecyclerView != null) {
mRecyclerView.requestDisallowInterceptTouchEvent(false);
isReCompute = true;
}
upAnim();
return true;
default:
break;
}
return true;
}
/**
*
*/
private void clearAnim() {
if (mValueAnimator == null) {
return;
}
mValueAnimator.end();
mValueAnimator.cancel();
mValueAnimator = null;
}
/**
*
*/
private void upAnim() {
int scrollX = getScrollX();
if (scrollX == mRightCanSlide || scrollX == 0) {
if (mStatusChangeLister != null) {
mStatusChangeLister.onStatusChange(scrollX == mRightCanSlide);
}
return;
}
clearAnim();
// 如果显出一半松开手指,那么自动完全显示。否则完全隐藏
if (scrollX >= mRightCanSlide / 2) {
mValueAnimator = ValueAnimator.ofInt(scrollX, mRightCanSlide);
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (int) animation.getAnimatedValue();
scrollTo(value, 0);
}
});
mValueAnimator.setDuration(mAnimDuring);
mValueAnimator.start();
if (mStatusChangeLister != null) {
mStatusChangeLister.onStatusChange(true);
}
}
else {
mValueAnimator = ValueAnimator.ofInt(scrollX, 0);
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (int) animation.getAnimatedValue();
scrollTo(value, 0);
}
});
mValueAnimator.setDuration(mAnimDuring);
mValueAnimator.start();
if (mStatusChangeLister != null) {
mStatusChangeLister.onStatusChange(false);
}
}
}
/**
* --/
*
*/
public void resetDelStatus() {
int scrollX = getScrollX();
if (scrollX == 0) {
return;
}
clearAnim();
mValueAnimator = ValueAnimator.ofInt(scrollX, 0);
mValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int value = (int) animation.getAnimatedValue();
scrollTo(value, 0);
}
});
mValueAnimator.setDuration(mAnimDuring);
mValueAnimator.start();
}
/*
********************************** ********************************************
*/
/**
*
*/
//设置状态监听
public void setStatusChangeLister(OnDelViewStatusChangeLister statusChangeLister) {
mStatusChangeLister = statusChangeLister;
}
/**
*
*
* */
public interface OnDelViewStatusChangeLister {
/**
*
* @param show
*/
void onStatusChange(boolean show);
}
}

@ -0,0 +1,182 @@
package com.example.orangesale_02.CustomLayout;
import android.content.Context;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* ViewLinearLayoutListView
*
* PriceBoard priceBoard = new PriceBoard(context,null);
* priceData = new PriceData();
* priceData.setName("现货白银");
* priceData.setEnCode("Ag");
* priceData.setPrice(4006);
* priceBoard.add(priceData);
* priceData = new PriceData();
* priceData.setName("现货铜");
* priceData.setEnCode("Cu");
* priceData.setPrice(43895);
* priceBoard.add(priceData);
* priceData = new PriceData();
* priceData.setName("现货镍");
* priceData.setEnCode("Ni");
* priceData.setPrice(43895);
* priceBoard.add(priceData);
* addView(priceBoard);
*/
public class PriceBoard extends LinearLayout {
private ListView listView;
private List items;
private LinearLayout.LayoutParams params;
public PriceBoard(Context context, AttributeSet attrs) {
super(context, attrs);
items = new ArrayList();
this.setOrientation(HORIZONTAL);
params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
listView = new ListView(context);
listView.setLayoutParams(params);
PriceBoardAdapter priceBoardAdapter = new PriceBoardAdapter(context);
listView.setAdapter(priceBoardAdapter);
addView(listView, params);
}
public static class PriceData {
private String name;
private String encode;
private int price;
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
public String getEnCode() {
return encode;
}
public void setEnCode(String getEnCode){
this.encode = encode;
}
public int getPrice() {
return price;
}
public void setPrice(int price){
this.price = price;
}
}
public void add(PriceData data) {
PriceBoardItem item = new PriceBoardItem(this.getContext(), null);
item.setItem(data);
items.add(item);
params.setMargins(10, 0, 0, 2);
// item.setLayoutParams(params);
}
public PriceBoardItem getItemView(int index) {
return (PriceBoardItem) items.get(index);
}
private class PriceBoardItem extends LinearLayout {
private TextView nameView;
private TextView enCodeView;
private TextView priceView;
private PriceData priceData;
public PriceBoardItem(Context context, AttributeSet attrs) {
super(context, attrs);
this.setOrientation(HORIZONTAL);
nameView = new TextView(context);
nameView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 38);
enCodeView = new TextView(context);
enCodeView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 28);
priceView = new TextView(context);
priceView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 48);
priceView.setGravity(Gravity.CENTER);
setLayout();
}
public TextView getNameView() {
return nameView;
}
public TextView getEnCodeView() {
return enCodeView;
}
public TextView getPriceView() {
return priceView;
}
public PriceData getPriceData() {
return priceData;
}
private void setLayout() {
LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1);
LinearLayout linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(VERTICAL);
linearLayout.addView(nameView, p);
linearLayout.addView(enCodeView, p);
addView(linearLayout, p);
p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1);
linearLayout = new LinearLayout(getContext());
linearLayout.setOrientation(VERTICAL);
linearLayout.addView(priceView, p);
addView(linearLayout, p);
}
public void setItem(PriceData data) {
priceData = data;
}
}
private class PriceBoardAdapter extends BaseAdapter {
private Context _context;
public PriceBoardAdapter(Context context) {
_context = context;
}
public int getCount() {
return items.size();
}
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
PriceBoardItem view = getItemView(position);
PriceData data = ((PriceBoardItem) items.get(position)).getPriceData();
view.getNameView().setText(data.getName());
view.getEnCodeView().setText(data.getEnCode());
view.getPriceView().setText(String.valueOf(data.getPrice()));
convertView = view;
return convertView;
}
}
}

@ -0,0 +1,72 @@
package com.example.orangesale_02.CustomLayout;
import android.content.Context;
import android.graphics.Point;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
/**
* LeftSlideView TouchEventLayout
* */
public class TouchEventLayout extends LinearLayout {
public static final String TAG = "TouchEventLayout";
/** 触摸监听 */
private OnTouchListener mOnTouchListener;
/** 坐标 */
private Point mPoint;
public TouchEventLayout(Context context) {
super(context);
}
public TouchEventLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public TouchEventLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setOnTouchListener(OnTouchListener onTouchListener) {
mOnTouchListener = onTouchListener;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int actionMasked = event.getActionMasked();
Log.e(TAG, "onTouchEvent: actionMasked = " + actionMasked);
return super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int actionMasked = ev.getActionMasked();
switch (actionMasked) {
case MotionEvent.ACTION_DOWN:
if (mOnTouchListener != null) {
mPoint = new Point((int)ev.getRawX(), (int)ev.getRawY());
mOnTouchListener.doTouch(mPoint);
}
break;
default:
break;
}
return super.onInterceptTouchEvent(ev);
}
/**
*
*/
public interface OnTouchListener {
/** 触摸处理 */
void doTouch(Point point);
}
}

@ -0,0 +1,205 @@
package com.example.orangesale_02.activity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.example.orangesale_02.R;
import com.example.orangesale_02.adapter.BottomBar_fragmentAdapter;
import com.example.orangesale_02.fragment.BottomBar_cart;
import com.example.orangesale_02.fragment.BottomBar_product;
import com.example.orangesale_02.fragment.BottomBar_profile;
import com.example.orangesale_02.fragment.BottomBar_shouye;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationBarView;
import com.google.android.material.navigation.NavigationView;
import java.util.ArrayList;
import java.util.List;
public class IndexActivity extends AppCompatActivity implements
ViewPager.OnPageChangeListener{
private BottomNavigationView bv_bottomNavigation;
// private TextView txt_topbar;
// private RadioGroup rg_tab_bar;
// private RadioButton rb_channel;
// private RadioButton rb_message;
// private RadioButton rb_better;
// private RadioButton rb_setting;
private ViewPager vpager;
private BottomBar_fragmentAdapter mAdapter;
public static final int PAGE_ONE = 0;
public static final int PAGE_TWO = 1;
public static final int PAGE_THREE = 2;
public static final int PAGE_FOUR = 3;
private List<Fragment> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
bindViews();
/***
* ViewPagerBottomNavigationView--
* ***/
bv_bottomNavigation.setOnItemSelectedListener(
new NavigationBarView.OnItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.menu_shouye:
//ViewPager 跳转到对应fragment
vpager.setCurrentItem(PAGE_ONE);
break;
case R.id.menu_product:
vpager.setCurrentItem(PAGE_TWO);
break;
case R.id.menu_cart:
vpager.setCurrentItem(PAGE_THREE);
break;
case R.id.menu_profile:
vpager.setCurrentItem(PAGE_FOUR);
break;
}
return true;
//这里返回true表示事件已经被处理。如果返回false为了达到条目选中效果还需要下面的代码
// item.setChecked(true); 不论点击了哪一个都手动设置为选中状态true该控件并没有默认实现)
// 。如果不设置只有第一个menu展示的时候是选中状态其他的即便被点击选中了图标和文字也不会做任何更改
}
});
//默认选中底部导航栏中的第一个
bv_bottomNavigation.getMenu().getItem(0).setChecked(true);
}
private void bindViews() {
// txt_topbar = (TextView) findViewById(R.id.txt_topbar);
// rg_tab_bar = (RadioGroup) findViewById(R.id.rg_tab_bar);
// rb_channel = (RadioButton) findViewById(R.id.rb_channel);
// rb_message = (RadioButton) findViewById(R.id.rb_message);
// rb_better = (RadioButton) findViewById(R.id.rb_better);
// rb_setting = (RadioButton) findViewById(R.id.rb_setting);
// rg_tab_bar.setOnCheckedChangeListener(this);
bv_bottomNavigation = (BottomNavigationView) findViewById(R.id.bv_bottomNavigation);
vpager = (ViewPager) findViewById(R.id.vpager);
//把fragment添加到list
list = new ArrayList<>();
list.add(new BottomBar_shouye());
list.add(new BottomBar_product());
list.add(new BottomBar_cart());
list.add(new BottomBar_profile());
mAdapter = new BottomBar_fragmentAdapter(getSupportFragmentManager(),list);
vpager.setAdapter(mAdapter);
vpager.setCurrentItem(PAGE_ONE);
vpager.addOnPageChangeListener(this);
vpager.setOffscreenPageLimit(4); //限制只有4个view可以左右滑动
// rb_channel.setChecked(true);
// rb_channel.setBackgroundColor(Color.RED);//被选中背景色就为红色
}
// @Override
// public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
// switch (checkedId) {
// case R.id.rb_channel:
// vpager.setCurrentItem(PAGE_ONE);
//// txt_topbar.setText("首页");
// break;
// case R.id.rb_message:
// vpager.setCurrentItem(PAGE_TWO);
//// txt_topbar.setText("商品种类");
// break;
// case R.id.rb_better:
// vpager.setCurrentItem(PAGE_THREE);
//// txt_topbar.setText("");
// break;
// case R.id.rb_setting:
// vpager.setCurrentItem(PAGE_FOUR);
//// txt_topbar.setText("个人信息");
// break;
// }
// }
//重写ViewPager页面切换的处理方法
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/***
* ViewPagerBottomNavigationView--
* ***/
@Override
public void onPageSelected(int position) {
switch (position){
case 0:
//ViewPager 左右滑动时BottomNavigationView显示对应item
bv_bottomNavigation.getMenu().getItem(0).setChecked(true);
// rb_channel.setBackgroundColor(Color.RED);
// rb_message.setBackgroundColor(Color.WHITE);
// rb_better.setBackgroundColor(Color.WHITE);
// rb_setting.setBackgroundColor(Color.WHITE);
break;
case 1:
bv_bottomNavigation.getMenu().getItem(1).setChecked(true);
// rb_channel.setBackgroundColor(Color.WHITE);
// rb_message.setBackgroundColor(Color.RED);
// rb_better.setBackgroundColor(Color.WHITE);
// rb_setting.setBackgroundColor(Color.WHITE);
break;
case 2:
bv_bottomNavigation.getMenu().getItem(2).setChecked(true);
// rb_channel.setBackgroundColor(Color.WHITE);
// rb_message.setBackgroundColor(Color.WHITE);
// rb_better.setBackgroundColor(Color.RED);
// rb_setting.setBackgroundColor(Color.WHITE);
break;
case 3:
bv_bottomNavigation.getMenu().getItem(3).setChecked(true);
// rb_channel.setBackgroundColor(Color.WHITE);
// rb_message.setBackgroundColor(Color.WHITE);
// rb_better.setBackgroundColor(Color.WHITE);
// rb_setting.setBackgroundColor(Color.RED);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
//state的状态有三个0表示什么都没做1正在滑动2滑动完毕
if (state == 2) {
switch (vpager.getCurrentItem()) {
// case PAGE_ONE:
//// rb_channel.setChecked(true);
// break;
// case PAGE_TWO:
//// rb_message.setChecked(true);
// break;
// case PAGE_THREE:
//// rb_better.setChecked(true);
// break;
// case PAGE_FOUR:
//// rb_setting.setChecked(true);
// break;
}
}
}
}

@ -0,0 +1,113 @@
package com.example.orangesale_02.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.orangesale_02.R;
import com.example.orangesale_02.database.OrangeDatabase;
public class MainActivity extends Activity implements View.OnClickListener{
private Button registerButton, loginButton;
private EditText usernameText, paswdEdit;
public boolean loginIn;
public static MainActivity instance = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
orangeDatabase.query(orangeDatabase, "orange_user"); //查询数据库
instance = this;
// SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
// Cursor c = sqLiteDatabase.query("orange_user", null,
// null, null,null,
// null,null);//游标接口相当于结果集ResultSet
//
// Log.i("query result: ", String.valueOf(orangeDatabase.list.size()));
// Log.i("query result: ", String.valueOf(orangeDatabase.list.get(0).getUsername()));
}
//界面组件初始化
private void init(){
usernameText = findViewById(R.id.username);
paswdEdit = findViewById(R.id.password);
loginButton = findViewById(R.id.login);
loginButton.setOnClickListener(this);
registerButton = (Button)findViewById(R.id.register);
registerButton.setOnClickListener(this);
}
//登录验证
private boolean validateLogin(){
String username = usernameText.getText().toString();
String password = paswdEdit.getText().toString();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
SQLiteDatabase sqLiteDatabase = orangeDatabase.getReadableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("select * from orange_user where " +
"username = ? and password = ?", new String[]{ username, password});
if (cursor.getCount() > 0 ){
return true;
}
return false;
}
@SuppressLint("Range")
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.register:
Intent intent = new Intent(this, RegisterActivity.class);
startActivity(intent);
// loginIn = false;
// usernameText.setText("XXXX");
// Intent intent = new Intent(MainActivity.this, UserActivity.class);
// Bundle bundle1 = new Bundle();
// OrangeDatabase orangeDatabase1 = new OrangeDatabase(MainActivity.this);
// bundle1.putString("username", usernameText.getText().toString());
//// bundle1 = orangeDatabase1.queryUserInfo(
//// orangeDatabase1.getReadableDatabase(), bundle1);
// intent.putExtras(bundle1);
// startActivity(intent);
break;
case R.id.login:
//注册时,引入了数据库,登录可以通过数据库进行验证,验证通过跳转到首页,不通过进行提示
if (validateLogin()){
Intent intent1 = new Intent(MainActivity.this, IndexActivity.class);
Bundle bundle = new Bundle();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
loginIn = true;
//传送用户信息到首页的"个人"
bundle.putString("username", usernameText.getText().toString());
bundle = orangeDatabase.queryUserInfo(
orangeDatabase.getReadableDatabase(), bundle);
intent1.putExtras(bundle);
startActivity(intent1);
}else{
Toast.makeText(MainActivity.this, "账号或者密码错误",
Toast.LENGTH_SHORT).show();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
// orangeDatabase.delete(orangeDatabase, "orange_user", 2);//删除数据
// orangeDatabase.insert(orangeDatabase,"orange_user", "mike",
// "1234", "男", "广东省深圳市福田区");//增加数据
// orangeDatabase.update(orangeDatabase, "orange_user", 1, "jane",
// "6666", "男", "广东省,深圳市,福田区"); //更新数据
orangeDatabase.query(orangeDatabase, "orange_user"); //查询数据库
}
break;
}
}
}

@ -0,0 +1,186 @@
package com.example.orangesale_02.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import com.example.orangesale_02.R;
import com.example.orangesale_02.database.OrangeDatabase;
import com.wheelpicker.AdministrativeMap;
import com.wheelpicker.AdministrativeUtil;
import com.wheelpicker.DataPicker;
import com.wheelpicker.OnCascadeWheelListener;
import com.wheelpicker.OnMultiDataPickListener;
import com.wheelpicker.PickOption;
import java.util.ArrayList;
import java.util.List;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener,
RadioGroup.OnCheckedChangeListener{
private EditText usernameEdit, passwordEdit, surePasswordEdit;
private TextView cityText;
private Button regButton;
private RadioGroup sexGroup;
private String sexStr = "男";
private String cityStr = "";
private AdministrativeMap mAdministrativeMap;
private List<Integer> mCascadeInitIndex = new ArrayList<Integer>();
private Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
init();
}
//界面组件初始化
private void init(){
cityText = findViewById(R.id.reg_province);
cityText.setOnClickListener(this);
usernameEdit = findViewById(R.id.reg_username);
passwordEdit = findViewById(R.id.reg_password);
surePasswordEdit = findViewById(R.id.reg_sure_password);
regButton = findViewById(R.id.reg_register);
regButton.setOnClickListener(this);
sexGroup = findViewById(R.id.sex);
sexGroup.setOnCheckedChangeListener(this);
mContext = this;//城市选择(级联操作)
// //设置OnCascadeWheelListener即可满足级联
// findViewById(R.id.reg_province).setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// pickCity(AdministrativeUtil.PROVINCE_CITY_AREA, mCascadeInitIndex);
// }
// });
}
//城市选择方法
private void pickCity(int mode, final List<Integer> initIndex) {
if (mAdministrativeMap == null) {
mAdministrativeMap = AdministrativeUtil.loadCity(RegisterActivity.this);
}
PickOption option = getPickDefaultOptionBuilder(mContext)
.setMiddleTitleText("请选择城市")
.setFlingAnimFactor(0.4f)
.setVisibleItemCount(7)
.setItemTextSize(mContext.getResources()
.getDimensionPixelSize(com.wheelpicker.R.dimen.font_24px))
.setItemLineColor(0xFF558800)
.build();
DataPicker.pickData(mContext, initIndex,
AdministrativeUtil.getPickData(mAdministrativeMap, initIndex, mode), option,
new OnMultiDataPickListener() {
@Override
public void onDataPicked(List indexArr, List val, List data) {
// String s = indexArr.toString() + ":" + val.toString();
// Toast.makeText(RegisterActivity.this, s, Toast.LENGTH_SHORT).show();
cityStr = val.get(0).toString()+ "," +val.get(1).toString()
+ "," +val.get(2).toString();
cityText.setText(cityStr);
initIndex.clear();
initIndex.addAll(indexArr);
}
}, new OnCascadeWheelListener<List<?>>() {
@Override
public List<?> onCascade(int wheelIndex, List<Integer> itemIndex) {
//级联数据
if (wheelIndex == 0) {
return mAdministrativeMap.provinces.get(itemIndex.get(0)).city;
} else if (wheelIndex == 1) {
return mAdministrativeMap.provinces.get(itemIndex.get(0)).city
.get(itemIndex.get(1)).areas;
}
return null;
}
});
}
//城市选择器默认设置
private PickOption.Builder getPickDefaultOptionBuilder(Context context) {
return PickOption.getPickDefaultOptionBuilder(context)
.setLeftTitleColor(0xFF1233DD)
.setRightTitleColor(0xFF1233DD)
.setMiddleTitleColor(0xFF333333)
.setTitleBackground(0XFFDDDDDD)
.setLeftTitleText("取消")
.setRightTitleText("确定");
}
@Override
public void onClick(View view) {
switch(view.getId()){
case R.id.reg_province://显示城市
pickCity(AdministrativeUtil.PROVINCE_CITY_AREA, mCascadeInitIndex);
break;
case R.id.reg_register:
validateRegister();//注册验证方法
break;
}
}
//注册验证
public void validateRegister(){
Intent intent = new Intent(RegisterActivity.this, UserActivity.class);
String username = usernameEdit.getText().toString();
String password = passwordEdit.getText().toString();
String surePassword = surePasswordEdit.getText().toString();
String city = cityText.getText().toString();
//判断两次密码是否一致
if (password.equals(surePassword)){
if (!username.equals("") || !password.equals("")){
if (!city.equals("")){
Bundle bundle = new Bundle();
//传送用户信息到个人主页
bundle.putString("username", username);
bundle.putString("password", password);
bundle.putString("sex", sexStr);
bundle.putString("city", city);
//使用安卓自带的SQlite数据库存储注册的信息
OrangeDatabase orangeDatabase = new OrangeDatabase(RegisterActivity.this);
SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
insertData(sqLiteDatabase, bundle);
intent.putExtras(bundle);
startActivity(intent); //跳转到个人主页
}else{
Toast.makeText(RegisterActivity.this,"请选择地址",
Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(RegisterActivity.this, "账号或密码未填写",
Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(RegisterActivity.this, "两次密码输入不一致",
Toast.LENGTH_SHORT).show();
}
}
//插入数据的值
private void insertData(SQLiteDatabase sqLiteDatabase, Bundle bundle){
ContentValues contentValues = new ContentValues();
contentValues.put("username", bundle.getString("username"));
contentValues.put("password", bundle.getString("password"));
contentValues.put("sex", bundle.getString("sex"));
contentValues.put("city", bundle.getString("city"));
sqLiteDatabase.insert("orange_user", null, contentValues);
sqLiteDatabase.close();
}
//监听RadioGroup
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
//根据用户选择来改变性别的值
sexStr = checkedId == R.id.reg_man ? "男" : "女";
}
}

@ -0,0 +1,66 @@
package com.example.orangesale_02.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.orangesale_02.R;
import com.example.orangesale_02.database.OrangeDatabase;
public class UserActivity extends Activity implements View.OnClickListener{
Button backMainButton,loginoutButton;
TextView user_username;
String username;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_user);
//从注册活动页的textView 获取用户信息
Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
username = bundle.getString("username");
String sex = bundle.getString("sex");
String city = bundle.getString("city");
user_username = findViewById(R.id.user_username);
user_username.setText("用户名:"+username);
TextView user_sex = findViewById(R.id.user_sex);
user_sex.setText("性别:"+sex);
TextView user_city = findViewById(R.id.user_city);
user_city.setText("城市:"+city);
backMainButton = (Button)findViewById(R.id.backMain);
backMainButton.setOnClickListener(this);
loginoutButton = (Button)findViewById(R.id.loginout);
loginoutButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.backMain:
// startActivity(new Intent(this, IndexActivity.class));
Intent intent = new Intent(UserActivity.this, IndexActivity.class);
Bundle bundle1 = new Bundle();
OrangeDatabase orangeDatabase1 = new OrangeDatabase(UserActivity.this);
//传送用户信息到首页的"个人"
bundle1.putString("username", username);
bundle1 = orangeDatabase1.queryUserInfo(
orangeDatabase1.getReadableDatabase(), bundle1);
intent.putExtras(bundle1);
startActivity(intent);
break;
case R.id.loginout:
startActivity(new Intent(this, MainActivity.class));
break;
}
}
}

@ -0,0 +1,33 @@
package com.example.orangesale_02.adapter;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;
public class BottomBar_fragmentAdapter extends FragmentPagerAdapter {
private List<Fragment> mlist;
//构造器
public BottomBar_fragmentAdapter(FragmentManager fragment,List<Fragment> list) {
super(fragment);
this.mlist = list;
}
//显示第几个页面
@NonNull
@Override
public Fragment getItem(int position) {
return mlist.get(position);
}
//一共有几个页面
@Override
public int getCount() {
return mlist.size();
}
}

@ -0,0 +1,241 @@
package com.example.orangesale_02.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Point;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.orangesale_02.CustomLayout.LeftSlideView;
import com.example.orangesale_02.R;
import com.example.orangesale_02.bean.ChatBean;
import com.example.orangesale_02.custominterface.GoodsCallback;
import com.example.orangesale_02.custominterface.OnDeleteClickListener;
import com.example.orangesale_02.custominterface.OnEditClickListener;
import java.util.ArrayList;
import java.util.List;
public class GoodCartAdapter extends RecyclerView.Adapter<GoodCartAdapter.GoodViewHolder>{
private Context context;
List<ChatBean.ChatItem> data = new ArrayList<>();
private OnEditClickListener mOnEditClickListener;
private OnDeleteClickListener mOnDeleteClickListener;
private GoodsCallback goodsCallback; //商品回调
ChatBean item;//从StoreCallback获取店铺数据
private LeftSlideView mLeftSlideView;
//为了防止垂直方向的同向冲突那么需要将外层的RecyclerView传入左滑容器在容器中会处理滑动冲突
private RecyclerView mRecyclerView;
View contentView;
View menuView;
//构造方法
public GoodCartAdapter(Context context, List<ChatBean.ChatItem> data,
GoodsCallback goodsCallback, RecyclerView recyclerView){
this.context = context;
this.data = data;
this.goodsCallback = goodsCallback;
this.mRecyclerView = recyclerView;
}
//返回内部类MyViewHolder
@Override
public GoodViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cartitem_good, parent, false);
// return new GoodViewHolder(view);
//左滑删除容器 LeftSlideView
final LeftSlideView leftSlideView = new LeftSlideView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT
, ViewGroup.LayoutParams.WRAP_CONTENT);
leftSlideView.setLayoutParams(params);
contentView = LayoutInflater.from(context).inflate(R.layout.cartitem_good, null);
menuView = LayoutInflater.from(context).inflate(R.layout.cartitem_good_menuview, null);
leftSlideView.addContentView(contentView);
leftSlideView.addMenuView(menuView);
leftSlideView.setRecyclerView(mRecyclerView);
leftSlideView.setStatusChangeLister(new LeftSlideView.OnDelViewStatusChangeLister() {
@Override
public void onStatusChange(boolean show) {
if (show) {
// 如果编辑菜单在显示
mLeftSlideView = leftSlideView;
}
}
});
return new GoodViewHolder(leftSlideView);
}
//对每一项的TextView进行赋值取出实体的某一属性进行显示position为下标。
@Override
public void onBindViewHolder(GoodViewHolder holder, @SuppressLint("RecyclerView") final int position) {
final ChatBean.ChatItem good = data.get(position);
Glide.with(context).load(good.getGoodsImg()).into(holder.iv_goodsImage);
holder.tv_goodsName.setText(good.getGoodsname());
holder.tv_goodsDescription.setText("颜色:" + good.getColor()+" "+"尺寸:" + good.getSize());
holder.tv_goodsPrice.setText("¥" + good.getGoodsPrice());
holder.tv_goodsNum.setText(good.getGoodsNum()+ "");
//商品初始状态是否勾选
if(good.getGoodChecked()){
holder.iv_goodsSelect.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_checked));
}else {
holder.iv_goodsSelect.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_check));
}
//商品item中的点击事件
holder.iv_goodsSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
good.setGoodChecked(!good.getGoodChecked());
notifyDataSetChanged();
controlStore(item); //该店铺如果所有商品都选中,则店铺自动选中
goodsCallback.calculationPrice();//计算商品价格
}
});
//给每个item->GoodsMin绑定点击事件数量的改变
holder.iv_mine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(data.get(position).getGoodsNum() > 1) {
int count = data.get(position).getGoodsNum() - 1;
if (mOnEditClickListener != null) {
mOnEditClickListener.onEditClick(position, data.get(position).getProductId(), count);
}
data.get(position).setGoodsNum(count);
notifyDataSetChanged();
}
}
});
//给每个item->GoodsAdd绑定点击事件数量的改变
holder.iv_goodsAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int count = data.get(position).getGoodsNum() + 1;
if(mOnEditClickListener != null){
mOnEditClickListener.onEditClick(position,data.get(position).getProductId(),count);
}
data.get(position).setGoodsNum(count);
notifyDataSetChanged();
}
});
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(context, "点击内容区域", Toast.LENGTH_SHORT).show();
}
});
//删除的点击事件
menuView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(context, "点击删除按钮", Toast.LENGTH_SHORT).show();
if(good.getGoodChecked()){
goodsCallback.deleteCheckedGoods();//商品选中时
}else{
showDialog(view,position);//商品未选中时
}
}
});
}
//获得实体list的长度即显示项的个数
@Override
public int getItemCount() {
return data == null?0:data.size();
}
static class GoodViewHolder extends RecyclerView.ViewHolder{
private TextView tv_goodsName,tv_goodsDescription,tv_goodsPrice,tv_goodsNum;
private ImageView iv_goodsImage,iv_mine,iv_goodsAdd,iv_goodsSelect;
//变量绑定layout
public GoodViewHolder(View itemView) {
super(itemView);
tv_goodsName = (TextView) itemView.findViewById(R.id.tv_goodsName);
tv_goodsDescription = (TextView) itemView.findViewById(R.id.tv_goodsDescription);
tv_goodsPrice = (TextView) itemView.findViewById(R.id.tv_goodsPrice);
tv_goodsNum = (TextView) itemView.findViewById(R.id.tv_goodsNum);
iv_goodsImage = (ImageView) itemView.findViewById(R.id.iv_goodsImage);
iv_goodsSelect = (ImageView) itemView.findViewById(R.id.iv_goodsSelect);
iv_mine = (ImageView) itemView.findViewById(R.id.iv_mine);
iv_goodsAdd = (ImageView) itemView.findViewById(R.id.iv_goodsAdd);
}
}
/*********************************自定义方法****************************************************/
/**
* itemView
* @param point
*/
public void restoreItemView(Point point) {
if (mLeftSlideView != null) {
int[] pos = new int[2];
mLeftSlideView.getLocationInWindow(pos);
int width = mLeftSlideView.getWidth();
int height = mLeftSlideView.getHeight();
// 触摸点在view的区域内那么直接返回
if (point.x >= pos[0] && point.y >= pos[1]
&& point.x <= pos[0] + width && point.y <= pos[1] + height) {
return;
}
mLeftSlideView.resetDelStatus();//重置
}
}
/**
*
*
*/
public void controlStore(ChatBean item) {
int num = 0;
for (ChatBean.ChatItem bean : item.getgoodsList()) {
if (bean.getGoodChecked()) {
++num;
}
}
if (num == item.getgoodsList().size()) {
//商品全选中ShopCartAdapter需要设置店铺为选中状态
//通过回调接口 goodsCallback 向ShopCartAdapter 传递需要设置的店铺id和店铺状态设置值
goodsCallback.selectAllStore(item.getShopId(),true);
} else {
goodsCallback.selectAllStore(item.getShopId(),false);
}
}
//每个item删除的点击事件
private void showDialog(final View view, final int position){
//调用删除某个规格商品的接口
if(mOnDeleteClickListener != null){
mOnDeleteClickListener.onDeleteClick(
view,position,data.get(position).getProductId());//找到商品id
}
data.remove(position);
//刷新数据
notifyDataSetChanged();
if (data.size() == 0){
goodsCallback.deleteUncheckedGoods(item.getShopId());
}
}
}

@ -0,0 +1,99 @@
package com.example.orangesale_02.adapter;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.orangesale_02.R;
import com.example.orangesale_02.bean.ProductLeftBean;
import java.util.List;
public class ProductLeftAdapter extends BaseAdapter {
private List<ProductLeftBean> leftList;
private int rightclickItem = -1;
private int leftclickItem = -1;
public boolean isClickLeft = false;
//创建一个构造方法
public ProductLeftAdapter(List<ProductLeftBean> mList) {
this.leftList = mList;
}
@Override
public int getCount() {
return leftList.size();
}
@Override
public Object getItem(int position) {
return leftList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Produce_leftViewHolder viewHolder = null;
if (convertView==null){
convertView = View.inflate(parent.getContext(), R.layout.productitem_left,null);
//创建viewHolder对象
viewHolder = new Produce_leftViewHolder();
viewHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_title);
viewHolder.v_bg = (LinearLayout) convertView.findViewById(R.id.v_bg);
//让viewholder挂在convertview上面一起复用
convertView.setTag(viewHolder);
}else {
//当convertView不为空时,吧viewholder取出来
viewHolder = (Produce_leftViewHolder) convertView.getTag();
}
//获取对应条目的内容
ProductLeftBean leftBean = (ProductLeftBean) getItem(position);
//把对应条目的内容设置在控件上
viewHolder.tv_title.setText(leftBean.title);
//给左侧条目设置颜色
if (isClickLeft){
if (leftclickItem != position){
viewHolder.v_bg.setBackgroundColor(
parent.getContext().getResources().getColor(R.color.yellow));
}else{
viewHolder.v_bg.setBackgroundColor(Color.WHITE);
}
}else{
if (rightclickItem != position){
viewHolder.v_bg.setBackgroundColor(
parent.getContext().getResources().getColor(R.color.yellow));
}else{
viewHolder.v_bg.setBackgroundColor(Color.WHITE);
}
}
return convertView;
}
//创建一个viewholder,用来复用对象
class Produce_leftViewHolder{
TextView tv_title;
LinearLayout v_bg;
}
//左侧条目点击事件设置UI
public void setCurrentSelect_Left(int position){
this.leftclickItem = position;
}
//右侧滚动或点击设置对应的左侧条目UI
public void setCurrentSelect_Right(int currentLeftItem){
this.rightclickItem = currentLeftItem;
}
}

@ -0,0 +1,96 @@
package com.example.orangesale_02.adapter;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.orangesale_02.R;
import com.example.orangesale_02.bean.ProductLeftBean;
import com.example.orangesale_02.bean.ProductRightBean;
import java.util.List;
import java.util.Random;
import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
public class ProductRightAdapter extends BaseAdapter implements StickyListHeadersAdapter {
private List<ProductLeftBean> mLeft;
private List<ProductRightBean> mRight;
private Context context;
public ProductRightAdapter(List<ProductLeftBean> mLeft, List<ProductRightBean> mRight,
Context context) {
this.mLeft = mLeft;
this.mRight = mRight;
this.context = context;
}
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
TextView tv = new TextView(context);
tv.setBackgroundColor(Color.WHITE);
tv.setTextColor(Color.BLACK);
tv.setTextSize(15);
tv.setText(mRight.get(position).type);
return tv;
}
@Override
public long getHeaderId(int position) {
return mRight.get(position).typeId;
}
@Override
public int getCount() {
return mRight.size();
}
@Override
public Object getItem(int position) {
return mRight.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Produce_rightViewHolder viewHolder = null;
if (convertView==null){
convertView = View.inflate(context, R.layout.productitem_right,null);
viewHolder = new Produce_rightViewHolder();
viewHolder.tv_foodname = (TextView) convertView.findViewById(R.id.tv_foodname);
viewHolder.tv_foodprice = (TextView) convertView.findViewById(R.id.tv_foodprice);
viewHolder.tv_foodsale = (TextView) convertView.findViewById(R.id.tv_foodsale);
viewHolder.iv_img = (ImageView) convertView.findViewById(R.id.iv_img);
convertView.setTag(viewHolder);
}else {
viewHolder = (Produce_rightViewHolder) convertView.getTag();
}
ProductRightBean rightBean = mRight.get(position);
viewHolder.tv_foodname.setText(rightBean.foodname);
viewHolder.iv_img.setImageResource(rightBean.img);
//使用Random获取随机数
Random random = new Random();
int i = random.nextInt(100);
viewHolder.tv_foodsale.setText("月销量"+i+"份");
int j = random.nextInt(50);
viewHolder.tv_foodprice.setText("$"+j);
return convertView;
}
//创建一个viewholder,用来复用对象
class Produce_rightViewHolder{
TextView tv_foodname;
TextView tv_foodprice;
TextView tv_foodsale;
ImageView iv_img;
}
}

@ -0,0 +1,280 @@
package com.example.orangesale_02.adapter;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Point;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.orangesale_02.CustomLayout.TouchEventLayout;
import com.example.orangesale_02.CustomLayout.DPIUtil;
import com.example.orangesale_02.R;
import com.example.orangesale_02.bean.ChatBean;
import com.example.orangesale_02.custominterface.GoodsCallback;
import com.example.orangesale_02.custominterface.StoreCallback;
import java.util.ArrayList;
import java.util.List;
public class ShopCartAdapter extends RecyclerView.Adapter<ShopCartAdapter.ShopViewHolder>
implements GoodsCallback{
private Context context;
private GoodCartAdapter goodsAdapter;
private List<ChatBean> shopslist = new ArrayList<>();//店铺列表
public List<Integer> shopIdList = new ArrayList<>();//全选列表
private StoreCallback storesCallback; //商铺回调
public double totalPrice = 0.00;//商品总价
public int totalCount = 0;//商品总数量
//构造方法
public ShopCartAdapter(Context context, List<ChatBean> shopslist, StoreCallback storesCallback){
this.context = context;
this.shopslist = shopslist;
this.storesCallback = storesCallback;
}
//返回我们的内部类MyViewHolder
@Override
public ShopViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.cartitem_store, parent, false);
// 初始化转换工具
DPIUtil.setDensity(context.getResources().getDisplayMetrics().density);
// 左滑删除容器LeftSlideView 的父级 TouchEventLayout监听父级的触摸事件
View root = view.findViewById(R.id.root);
if (root instanceof TouchEventLayout) {
TouchEventLayout ll = (TouchEventLayout) root;
ll.setOnTouchListener(new TouchEventLayout.OnTouchListener() {
@Override
public void doTouch(Point point) {
if (goodsAdapter != null) {
goodsAdapter.restoreItemView(point);//还原itemView
}
}
});
}
return new ShopViewHolder(view);
}
//对每一项的TextView进行赋值取出实体的某一属性进行显示position为下标。
@Override
public void onBindViewHolder(ShopViewHolder holder, @SuppressLint("RecyclerView") int position) {
ChatBean shop = shopslist.get(position);
//绑定商品适配器
holder.rv_goods.setLayoutManager(new LinearLayoutManager(context));
goodsAdapter = new GoodCartAdapter(context, shop.getgoodsList(),
this,holder.rv_goods);
holder.rv_goods.setAdapter(goodsAdapter);
goodsAdapter.item = shop;//将shop传递给商品的item用于判断商品是否已全选是否选中店铺
//商店名数据填充
holder.tv_store_name.setText(shop.getShopName());
//店铺初始状态是否勾选
if(shop.getShopSelect()){
holder.iv_checked_store.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_checked));
}else {
holder.iv_checked_store.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_check));
}
//shop选中的点击事件
holder.iv_checked_store.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//当前商铺勾选状态取反
shop.setShopSelect(!shop.getShopSelect());
notifyDataSetChanged();
//全选事件--当一个一个选中店铺时全选按钮为true
if (shop.getShopSelect()){
selectAllGoods(shop.getShopId(), true);//该商铺下所有商品勾选状态同商铺一样
//该店铺已被选中但全选列表中没有该店铺id
if(!shopIdList.contains(shop.getShopId())){
shopIdList.add(shop.getShopId());//添加到店铺列表
}
}else{
selectAllGoods(shop.getShopId(), false);//该商铺下所有商品勾选状态同商铺一样
//该店铺未被选中全选列表移除该店铺id
if(shopIdList.contains(shop.getShopId())){
shopIdList.remove((Integer) shop.getShopId());
}
}
controllAllChecked(); //传递全选按钮的状态到主页
}
});
}
//获得实体list的长度即显示项的个数
@Override
public int getItemCount() {
return shopslist == null?0:shopslist.size();
}
class ShopViewHolder extends RecyclerView.ViewHolder{
private RecyclerView rv_goods;
private TextView tv_store_name;
private ImageView iv_checked_store;//店铺是否被选中
//变量绑定layout
public ShopViewHolder(View itemView) {
super(itemView);
rv_goods = itemView.findViewById(R.id.rv_goods);
tv_store_name = (TextView) itemView.findViewById(R.id.tv_store_name);
iv_checked_store = (ImageView) itemView.findViewById(R.id.iv_checked_store);
}
}
/****************************自定义方法*************************************************/
/**
*
*/
public void controllAllChecked() {
if(shopIdList.size() == shopslist.size() && shopslist.size() != 0){
//全选
storesCallback.isSelectAll(true);
}else {
//不全选
storesCallback.isSelectAll(false);
}
calculationPrice();
}
/**
* shop--
*/
public void selectAllGoods(int shopId, boolean state) {
//根据店铺id选中该店铺下所有商品
for (ChatBean shop : shopslist) {
//店铺id等于传递过来的店铺id 则选中该店铺下所有商品
if (shop.getShopId() == shopId) {
for (ChatBean.ChatItem good : shop.getgoodsList()) {
good.setGoodChecked(state);
//刷新
notifyDataSetChanged();
}
}
}
}
/*************************** 回调 *******************************/
/**
* GoodsCallback
*
*/
@Override
public void calculationPrice(){
//每次计算之前先置零
totalPrice = 0.00;
totalCount = 0;
//循环购物车中的店铺列表
for (int i = 0; i < shopslist.size(); i++) {
ChatBean shop = shopslist.get(i);
//循环店铺中的商品列表
for (int j = 0; j < shop.getgoodsList().size(); j++) {
ChatBean.ChatItem good = shop.getgoodsList().get(j);
//当有选中商品时计算数量和价格
if (good.getGoodChecked()) {
totalCount++;
totalPrice += good.getGoodsPrice() * good.getGoodsNum();
}
}
}
storesCallback.allPrice(totalPrice,totalCount);//通过StoreCallback 设置首页的总价格
}
/**
* GoodsCallback
* 1.GoodsCallback
* 2.
*/
@Override
public void selectAllStore(int shopId, boolean state) {
for (ChatBean shop : shopslist) {
if(shopId == shop.getShopId()){
//GoodsCallback 回调 -- 商品选中状态决定店铺选中状态
//遍历,在 shopslist 找到需要设置的店铺,设置为选中状态
shop.setShopSelect(state);
notifyDataSetChanged();
//StoreCallback 回调 -- 店铺选中状态决定全选按钮状态
//单击商品,记录选中店铺的shopid,添加到全选列表中
if (!shopIdList.contains(shop.getShopId()) && state) {
//如果列表中没有这个店铺Id且当前店铺为选中状态
shopIdList.add(shop.getShopId());
}else {
if(shopIdList.contains(shop.getShopId())){
//通过list.indexOf获取属性的在列表中的下标不过强转Integer更简洁
shopIdList.remove((Integer) shop.getShopId());
}
}
}
}
controllAllChecked();//传递全选按钮的状态到主页
}
/** GoodsCallback
*
* **/
@Override
public void deleteCheckedGoods() {
//店铺列表
List<ChatBean> storeList = new ArrayList<>();
for (int i = 0; i < shopslist.size(); i++) {
ChatBean store = shopslist.get(i);
if (store.getShopSelect()) {
//店铺如果选择则添加到此列表中
storeList.add(store);
}
//商品列表
List<ChatBean.ChatItem> newgoodsList = new ArrayList<>();
List<ChatBean.ChatItem> goodsList = store.getgoodsList();
//循环店铺中的商品列表
for (int j = 0; j < goodsList.size(); j++) {
ChatBean.ChatItem good = goodsList.get(j);
//当有选中商品时添加到此列表中
if (good.getGoodChecked()) {
newgoodsList.add(good);
}
}
//删除商品
goodsList.removeAll(newgoodsList);
}
shopslist.removeAll(storeList);//删除店铺
shopIdList.clear();//删除了选中商品,清空已选择的标识
controllAllChecked();////传递全选按钮的状态到主页
//刷新数据
notifyDataSetChanged();
}
/** GoodsCallback
*
* **/
@Override
public void deleteUncheckedGoods(int shopId) {
List<ChatBean> storeList = new ArrayList<>();
for (int i = 0; i < shopslist.size(); i++){
ChatBean shop = shopslist.get(i);
if (shopId == shop.getShopId()) {
// Log.i("data - getShopId", String.valueOf(shopId));
storeList.add(shop);
}
}
shopslist.removeAll(storeList);//删除店铺
storesCallback.allPrice(totalPrice,totalCount);
notifyDataSetChanged();
}
}

@ -0,0 +1,71 @@
package com.example.orangesale_02.adapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.orangesale_02.R;
import com.example.orangesale_02.bean.ProductLeftBean;
import com.example.orangesale_02.bean.ShouyeGridIcon;
import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.List;
public class ShouyeGridBaseA extends BaseAdapter {
private List<ShouyeGridIcon> gridList;
//创建一个构造方法
public ShouyeGridBaseA(List<ShouyeGridIcon> mList) {
this.gridList = mList;
}
@Override
public int getCount() {
return gridList.size();
}
@Override
public Object getItem(int position) {
return gridList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
GridViewHolder viewHolder = null;
if (convertView==null){
convertView = View.inflate(parent.getContext(), R.layout.shouyeitem_grid_icon,null);
//创建viewHolder对象
viewHolder = new GridViewHolder();
viewHolder.img_icon = (ImageView) convertView.findViewById(R.id.img_icon);
viewHolder.txt_icon = (TextView) convertView.findViewById(R.id.txt_icon);
//让viewholder挂在convertview上面一起复用
convertView.setTag(viewHolder);
}else {
//当convertView不为空时,吧viewholder取出来
viewHolder = (GridViewHolder) convertView.getTag();
}
viewHolder.img_icon.setImageResource(gridList.get(position).getiId());
viewHolder.txt_icon.setText(gridList.get(position).getiName());
return convertView;
}
//创建一个viewholder,用来复用对象
class GridViewHolder{
ImageView img_icon;
TextView txt_icon;
}
}

@ -0,0 +1,167 @@
package com.example.orangesale_02.bean;
import java.util.List;
//店铺类
public class ChatBean {
private String shopName;//店铺名
private boolean shopChecked;
private int shopId;
private List<ChatItem> goodsList;
public ChatBean(String shopname, int shopId,List<ChatItem> goodsList) {
this.shopName = shopname;
this.shopId = shopId;
this.goodsList = goodsList;
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
public List<ChatItem> getgoodsList() {
return goodsList;
}
public void setgoodsList(List<ChatItem> goodsList) {
this.goodsList = goodsList;
}
public boolean getShopSelect(){
return shopChecked;
}
public void setShopSelect(boolean shopChecked) {
this.shopChecked = shopChecked;
}
public int getShopId() {
return shopId;
}
public void setShopId(int shopId) {
this.shopId = shopId;
}
//商品类
public static class ChatItem {
private String goodsname;//商品
private int goodsImg;
private int goodsPrice;
private int goodsNum;
private String defaultPic;
private boolean goodChecked;
private boolean shopChecked;
private int shopId;
private String color;
private String shopName;
private int productId;
private int index;
private String size;
public ChatItem(String goodsname, int goodsImg, String color,String size,
int goodsPrice,int goodsNum) {
this.goodsname = goodsname;
this.goodsImg = goodsImg;
this.color = color;
this.size = size;
this.goodsPrice = goodsPrice;
this.goodsNum = goodsNum;
}
public String getGoodsname() {
return goodsname;
}
public void setGoodsname(String goodsname) {
this.goodsname = goodsname;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public int getGoodsPrice() {
return goodsPrice;
}
public void setGoodsPrice(int goodsPrice) {
this.goodsPrice = goodsPrice;
}
public int getGoodsNum() {
return goodsNum;
}
public void setGoodsNum(int count) {
this.goodsNum = count;
}
//本地图片
public int getGoodsImg() {return goodsImg;}
public void setGoodsImg(int goodsImg) {
this.goodsImg = goodsImg;
}
//网络图片
// public String getDefaultPic() {
// return defaultPic;
// }
// public void setDefaultPic(String defaultPic) {
// this.defaultPic = defaultPic;
// }
public boolean getGoodChecked() {
return goodChecked;
}
public void setGoodChecked(boolean goodChecked) {
this.goodChecked = goodChecked;
}
public int getIsFirst() {
return index;
}
public void setIsFirst(int index) {
this.index = index;
}
public int getGoodToShopId() {
return shopId;
}
public void setGoodToShopId(int shopId) {
this.shopId = shopId;
}
public boolean getIsShopSelect(){
return shopChecked;
}
public void setShopSelect(boolean shopChecked) {
this.shopChecked = shopChecked;
}
public int getProductId() {
return productId;
}
public void setProductId(int productId) {
this.productId = productId;
}
public String getShopName() {
return shopName;
}
public void setShopName(String shopName) {
this.shopName = shopName;
}
}
}

@ -0,0 +1,90 @@
package com.example.orangesale_02.bean;
import com.example.orangesale_02.R;
import java.util.ArrayList;
import java.util.List;
public class ProductData {
private static int[] imgs =
new int[]{R.drawable.pig,R.drawable.chicken,R.drawable.turkey,R.drawable.chicken_leg,
R.drawable.bowl_one,R.drawable.chili,R.drawable.shrimp,R.drawable.fish};
private static String[] leftData =
new String[]{"13.9特价套餐","粗粮主食🍚","佐餐小吃🍟","用心营养套餐(不含主食)🍜",
"三杯鸡双拼尊享套餐🐔","带鱼双拼尊享套餐🐟","红烧肉双拼尊享套餐🐷"};
private static String[] rightData0 =
new String[]{"洋芋粉炒腊肉","土鸡炖香菇","新疆大盘辣子土鸡","清炖土鸡块",
"农家蒸碗 ","香辣野猪肉","香辣薯条大虾","麻辣鱼"};
private static String[] rightData1 =
new String[]{"商芝扣肉","羊肉萝卜","干烧鱼 ","干煸野猪肉 ","排骨火锅",
"土鸡火锅","牛肉火锅","狗肉火锅 "};
private static String[] rightData2 =
new String[]{"虎皮辣子炒咸肉","重庆飘香水煮鱼","红烧土鸡块","干煸辣子土鸡",
"清炖全鸡 "};
private static String[] rightData3 =
new String[]{"洋芋粉炒腊肉","土鸡炖香菇","新疆大盘辣子土鸡","清炖土鸡块",
"农家蒸碗 ","香辣野猪肉","香辣薯条大虾","麻辣猪血"};
private static String[] rightData4 =
new String[]{"洋芋粉炒腊肉","土鸡炖香菇","新疆大盘辣子土鸡","清炖土鸡块",
"农家蒸碗 ","香辣野猪肉","香辣薯条大虾","麻辣猪血"};
private static String[] rightData5 =
new String[]{"洋芋粉炒腊肉","土鸡炖香菇","新疆大盘辣子土鸡","清炖土鸡块",
"农家蒸碗 ","香辣野猪肉","香辣薯条大虾","麻辣猪血"};
private static String[] rightData6 =
new String[]{"洋芋粉炒腊肉","土鸡炖香菇","新疆大盘辣子土鸡","清炖土鸡块",
"农家蒸碗 ","香辣野猪肉","香辣薯条大虾","麻辣猪血"};
public static List<ProductLeftBean> getLeftData(){
List<ProductLeftBean> list = new ArrayList<ProductLeftBean>();
for (int i = 0; i < leftData.length; i++) {
ProductLeftBean bean = new ProductLeftBean();
bean.title = leftData[i];
bean.type = i;
list.add(bean);
}
return list;
}
public static List<ProductRightBean> getRightData(List<ProductLeftBean> list){
List<ProductRightBean>rightList = new ArrayList<ProductRightBean>();
for (int i = 0; i < list.size(); i++) {
ProductLeftBean leftBean = list.get(i);
int mType = leftBean.type;
switch (mType) {
case 0:
rightList = getRightList(rightData0, leftBean, mType, rightList);
break;
case 1:
rightList = getRightList(rightData1, leftBean, mType, rightList);
break;
case 2:
rightList = getRightList(rightData2, leftBean, mType, rightList);
break;
case 3:
rightList = getRightList(rightData3, leftBean, mType, rightList);
break;
case 4:
rightList = getRightList(rightData4, leftBean, mType, rightList);
break;
case 5:
rightList = getRightList(rightData5, leftBean, mType, rightList);
break;
case 6:
rightList = getRightList(rightData6, leftBean, mType, rightList);
break;
}
}
return rightList;
}
private static List<ProductRightBean> getRightList(
String[] arr, ProductLeftBean leftBean,int mType, List<ProductRightBean> rightList){
for (int j = 0; j < arr.length; j++) {
ProductRightBean bean = new ProductRightBean();
bean.type = leftBean.title;
bean.foodname = arr[j];
bean.typeId = mType;
bean.img = imgs[j];
rightList.add(bean);
}
return rightList;
}
}

@ -0,0 +1,7 @@
package com.example.orangesale_02.bean;
public class ProductLeftBean {
public String title;
public int type;
}

@ -0,0 +1,10 @@
package com.example.orangesale_02.bean;
public class ProductRightBean {
public String foodname;
public String type;
public int typeId;
public int img;
}

@ -0,0 +1,28 @@
package com.example.orangesale_02.bean;
public class ShouyeGridIcon {
private int iId;
private String iName;
public ShouyeGridIcon() {
}
public ShouyeGridIcon(int iId, String iName) {
this.iId = iId;
this.iName = iName;
}
public int getiId() {
return iId;
}
public void setiId(int iId) {
this.iId = iId;
}
public String getiName() {
return iName;
}
public void setiName(String iName) {
this.iName = iName;
}
}

@ -0,0 +1,33 @@
package com.example.orangesale_02.custominterface;
import android.view.View;
import com.example.orangesale_02.bean.ChatBean;
import java.util.List;
/**
*
* @author llw
*/
public interface GoodsCallback {
/**
*
*/
void calculationPrice();
/**
*
*/
void selectAllStore(int shopId, boolean state);
/**
*
*/
void deleteCheckedGoods();
/**
*
*/
void deleteUncheckedGoods(int shopId);
}

@ -0,0 +1,7 @@
package com.example.orangesale_02.custominterface;
import android.view.View;
public interface OnDeleteClickListener {
void onDeleteClick(View view, int position, int cartid);
}

@ -0,0 +1,5 @@
package com.example.orangesale_02.custominterface;
public interface OnEditClickListener {
void onEditClick(int position, int cartid, int count);
}

@ -0,0 +1,13 @@
package com.example.orangesale_02.custominterface;
public interface StoreCallback {
/**
* UI
*/
void allPrice(double totalPrice, int totalCount);
/**
* UI
*/
void isSelectAll(boolean b);
}

@ -0,0 +1,106 @@
package com.example.orangesale_02.database;
import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public class OrangeDatabase extends SQLiteOpenHelper {
public List<UserInfo> list = new ArrayList<UserInfo>();
public OrangeDatabase(@Nullable Context context){
super(context, "orange", null, 1);
}
//数据库第一次创建时调用该方法
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String sql = "create table orange_user(id integer primary key autoincrement, " +
"username varchar(50), password varchar(50), sex varchar(10), city carchar(50))";
sqLiteDatabase.execSQL(sql);//execSQL 执行一条占位符SQL语句
}
//数据库版本号更新时调用
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
//增加数据
public void insert(OrangeDatabase orangeDatabase, String table, String username,
String password, String sex, String city) {
SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("username", username);
values.put("password", password);
values.put("sex", sex);
values.put("city", city);
sqLiteDatabase.insert(table,null,values);
sqLiteDatabase.close();
}
//删除数据
public void delete(OrangeDatabase orangeDatabase, String table, int id) {
SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
sqLiteDatabase.delete(table,"id=?", new String[]{id + ""});
sqLiteDatabase.close();
}
//更新数据
public void update(OrangeDatabase orangeDatabase, String table, int id, String username,
String password, String sex, String city) {
SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("username", username);
values.put("password", password);
values.put("sex", sex);
values.put("city", city);
sqLiteDatabase.update(table, values, "id=?", new String[]{id + ""});
sqLiteDatabase.close();
}
//查询数据库
public void query(OrangeDatabase orangeDatabase, String table){
SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
Cursor c = sqLiteDatabase.query(table, null,
null, null,null,
null,null);//游标接口相当于结果集ResultSet
while (c.moveToNext()){//移动光标到下一行
//getColumnIndex返回指定列的名称若不存在返回-1
@SuppressLint("Range") int id = c.getInt(c.getColumnIndex("id"));
@SuppressLint("Range") String username = c.getString(1);
@SuppressLint("Range") String password = c.getString(2);
@SuppressLint("Range") String sex = c.getString(3);
@SuppressLint("Range") String city = c.getString(4);
list.add(new UserInfo(id,username,password,sex,city));
Log.i("query result: ",list.toString());
}
c.close();//关闭游标
sqLiteDatabase.close();//关闭数据库
}
//查询数据
public Bundle queryUserInfo(SQLiteDatabase sqLiteDatabase, Bundle bundle){
String username = bundle.getString("username");
Cursor cursor = sqLiteDatabase.rawQuery("select * from orange_user where username = ?",
new String[]{username});
if (cursor != null){
while(cursor.moveToNext()){
bundle.putString("sex", cursor.getString(3));
bundle.putString("city", cursor.getString(4));
}
}
cursor.close();
sqLiteDatabase.close();
return bundle;
}
}

@ -0,0 +1,64 @@
package com.example.orangesale_02.database;
public class UserInfo {
private int id;
private String username;
private String password;
private String sex;
private String city;
//构造方法
public UserInfo(int id, String username, String password, String sex, String city){
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.city = city;
}
public void setId(int id){
this.id = id;
}
public void setUsername( String username){
this.username = username;
}
public void setPaswd( String password){
this.password = password;
}
public void setSex( String sex){
this.sex = sex;
}
public void setCity( String city){
this.city = city;
}
public int getId(){
return id;
}
public String getUsername(){
return username;
}
public String getPassword(){
return password;
}
public String getSex(){
return sex;
}
public String getCity(){
return city;
}
@Override
public String toString(){
return "userInfo{ "+" id="+id+", username="+username+", paswd="+password
+", sex="+sex+", city="+city+"}";
}
}

@ -0,0 +1,265 @@
package com.example.orangesale_02.fragment;
import android.app.AlertDialog;
import android.os.Bundle;
//import android.support.v7.widget.LinearLayoutManager;
//import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.example.orangesale_02.R;
import com.example.orangesale_02.adapter.ShopCartAdapter;
import com.example.orangesale_02.bean.ChatBean;
import com.example.orangesale_02.custominterface.StoreCallback;
import com.scwang.smart.refresh.layout.api.RefreshLayout;
import java.util.ArrayList;
import java.util.List;
public class BottomBar_cart extends Fragment implements View.OnClickListener
, StoreCallback {
private LinearLayout lay_edit;
private TextView tv_total,tv_edit,tv_commit,tv_share_goods,tv_collect_goods,tv_delete_goods;
private ImageView iv_selectAll;
private RecyclerView rvStore;
private List<ChatBean> shopsList = new ArrayList<>();
private List<ChatBean.ChatItem> goodsList = new ArrayList<>();
private ShopCartAdapter mShopCartAdapter;
private AlertDialog dialog;//弹窗
private RefreshLayout refresh;//刷新布局
private LinearLayout layEmpty;//空布局
private boolean isEdit = false;//是否编辑
private boolean isAllChecked = false;//是否全选
private boolean isHaveGoods = false;//购物车是否有商品
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View view = inflater.inflate(R.layout.bottom_bar_cart, container, false);
return view;
}
//一般onCreateView()用于初始化Fragment的视图
// onViewCreated()一般用于初始化视图内各个控件,
// 而onCreate()用于初始化与Fragment视图无关的变量。
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initData();
}
/**
* UI
*/
private void initData(){
//绑定首页控件
tv_edit = getActivity().findViewById(R.id.tv_edit);//编辑
lay_edit = getActivity().findViewById(R.id.lay_edit);
iv_selectAll= getActivity().findViewById(R.id.iv_selectAll);
tv_total = getActivity().findViewById(R.id.tv_total);
tv_commit= getActivity().findViewById(R.id.tv_commit);
rvStore = getActivity().findViewById(R.id.recycleview);
tv_share_goods = getActivity().findViewById(R.id.tv_share_goods);
tv_collect_goods = getActivity().findViewById(R.id.tv_collect_goods);
tv_delete_goods = getActivity().findViewById(R.id.tv_delete_goods);
refresh = getActivity().findViewById(R.id.refresh);
layEmpty = getActivity().findViewById(R.id.lay_empty);
//首页控件添加点击事件
tv_edit.setOnClickListener((View.OnClickListener) this);
iv_selectAll.setOnClickListener((View.OnClickListener) this);
tv_commit.setOnClickListener((View.OnClickListener) this);
tv_share_goods.setOnClickListener((View.OnClickListener) this);
tv_collect_goods.setOnClickListener((View.OnClickListener) this);
tv_delete_goods.setOnClickListener((View.OnClickListener) this);
//绑定商铺适配器
rvStore.setLayoutManager(new LinearLayoutManager(getActivity()));
mShopCartAdapter = new ShopCartAdapter(getActivity(),shopsList,this);
rvStore.setAdapter(mShopCartAdapter);
ChatBean.ChatItem waitao = new ChatBean.ChatItem("可乐",
R.drawable.cola,"卡其","均码",1,2);
waitao.setProductId(0);
ChatBean.ChatItem maozi = new ChatBean.ChatItem("汉堡",
R.drawable.hamburger,"卡其","均码",1,2);
maozi.setProductId(1);
goodsList.add(waitao);
goodsList.add(maozi);
List<ChatBean.ChatItem> goodsList1 = new ArrayList<>();
ChatBean.ChatItem yifu = new ChatBean.ChatItem("披萨🍕",
R.drawable.cat_1,"卡其","均码",1,2);
yifu.setProductId(0);
goodsList1.add(yifu);
//商店初始化数据
shopsList.add(new ChatBean("ww店", 0,goodsList));
shopsList.add(new ChatBean("SS店", 1,goodsList1));
isHaveGoods = true; //购物车有商品
refresh.finishRefresh(); //下拉加载数据完成后,关闭下拉刷新动画
layEmpty.setVisibility(View.GONE);//隐藏布局
//禁用下拉刷新和上拉加载更多
refresh.setEnableRefresh(false);
refresh.setEnableLoadMore(false);
//下拉刷新监听
refresh.setOnRefreshListener(refreshLayout -> initData());
}
/**
*
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_edit://编辑
if (!isHaveGoods){
showMsg("当前购物车空空如也");
return;
}
if (isEdit) {
tv_edit.setText("编辑");
lay_edit.setVisibility(View.GONE);
isEdit = false;
} else {
tv_edit.setText("完成");
lay_edit.setVisibility(View.VISIBLE);
isEdit = true;
}
break;
case R.id.iv_selectAll://全选
if (!isHaveGoods){
showMsg("当前购物车空空如也");
return;
}
if (isAllChecked){
selectAllAct(false);//取消全选
}else{
selectAllAct(true);//全选
}
break;
case R.id.tv_commit://结算
if (!isHaveGoods){
showMsg("当前购物车空空如也");
return;
}
if (mShopCartAdapter.totalCount == 0){
showMsg("请选择要结算的商品");
return;
}
//弹窗
dialog = new AlertDialog.Builder(getContext())
.setMessage("总计:" + mShopCartAdapter.totalCount + "种商品,"
+ mShopCartAdapter.totalPrice + "元")
.setPositiveButton("确定", (dialog, which) ->
mShopCartAdapter.deleteCheckedGoods())
.setNegativeButton("取消", (dialog, which) -> dialog.dismiss())
.create();
dialog.show();
break;
case R.id.tv_delete_goods://删除
if (mShopCartAdapter.totalCount == 0){
showMsg("请选择要删除的商品");
return;
}
//弹窗
dialog = new AlertDialog.Builder(getContext())
.setMessage("确定要删除所选商品吗?")
.setPositiveButton("确定",(dialog,which)->
mShopCartAdapter.deleteCheckedGoods())
.setNegativeButton("取消",(dialog,which)-> dialog.dismiss())
.create();
dialog.show();
//改变界面UI
tv_edit.setText("编辑");
lay_edit.setVisibility(View.GONE);
isEdit = false;
break;
case R.id.tv_collect_goods://收藏
if (mShopCartAdapter.totalCount == 0){
showMsg("请选择要收藏的商品");
return;
}
showMsg("收藏成功");
break;
case R.id.tv_share_goods://分享
if (mShopCartAdapter.totalCount == 0){
showMsg("请选择要分享的商品");
return;
}
showMsg("分享成功");
break;
default:
break;
}
}
/**
* StoreCallback
* -- UI
*/
@Override
public void allPrice(double totalPrice, int totalCount) {
tv_total.setText("¥" + mShopCartAdapter.totalPrice);
tv_commit.setText( mShopCartAdapter.totalCount
== 0 ? "结算" : "结算(" + mShopCartAdapter.totalCount + ")");
if (shopsList.size() <= 0 ){
isHaveGoods = false; //购物车无商品
refresh.setEnableRefresh(true); //启动下拉刷新动画
layEmpty.setVisibility(View.VISIBLE);//显示空布局
}
}
/**
* StoreCallback
* -- UI
*/
@Override
public void isSelectAll(boolean state) {
iv_selectAll.setImageDrawable(getResources().getDrawable(
state ? R.drawable.ic_checked : R.drawable.ic_check));
isAllChecked = state;
}
/****************************自定义方法*************************************************/
/**
*
* @param state
*/
private void selectAllAct(boolean state) {
//修改背景
iv_selectAll.setImageDrawable(getResources().getDrawable(
state ? R.drawable.ic_checked : R.drawable.ic_check));
for (ChatBean shop : shopsList) {
//商品是否选中
mShopCartAdapter.selectAllGoods(shop.getShopId(), state);
//店铺是否选中
mShopCartAdapter.selectAllStore(shop.getShopId(), state);
}
isAllChecked = state;
}
/**
* Toast
* @param msg
*/
private void showMsg(String msg) {
Toast.makeText(getActivity(),msg,Toast.LENGTH_SHORT).show();
}
}

@ -0,0 +1,156 @@
package com.example.orangesale_02.fragment;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.example.orangesale_02.R;
import com.example.orangesale_02.adapter.BottomBar_fragmentAdapter;
import com.example.orangesale_02.adapter.ProductLeftAdapter;
import com.example.orangesale_02.adapter.ProductRightAdapter;
import com.example.orangesale_02.bean.ProductData;
import com.example.orangesale_02.bean.ProductLeftBean;
import com.example.orangesale_02.bean.ProductRightBean;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
public class BottomBar_product extends Fragment implements AbsListView.OnScrollListener {
private ListView lv_left;
private StickyListHeadersListView lv_right;
private int currentLeftItem;
ProductLeftAdapter leftAdapter;
ProductRightAdapter rightAdapter;
List<ProductLeftBean> leftData;
List<ProductRightBean> rightData;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View view = inflater.inflate(R.layout.bottom_bar_product, container, false);
return view;
}
//一般onCreateView()用于初始化Fragment的视图
// onViewCreated()一般用于初始化视图内各个控件,
// 而onCreate()用于初始化与Fragment视图无关的变量。
@Override
public void onViewCreated(@NonNull View view, @androidx.annotation.Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
lv_left = view.findViewById(R.id.lv_left);
lv_right = view.findViewById(R.id.lv_right);
initData();
}
private void initData() {
//创建适配器
leftAdapter = new ProductLeftAdapter(ProductData.getLeftData());
//获取左侧数据
leftData = ProductData.getLeftData();
//获取右侧数据
rightData = ProductData.getRightData(leftData);
rightAdapter = new ProductRightAdapter(leftData, rightData, getContext());
//为左侧布局设置适配器
lv_left.setAdapter(leftAdapter);
lv_right.setAdapter(rightAdapter);
//为左侧条目设置点击事件
lv_left.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
//当左侧条目被点击时,记录下被点击条目的type
int type = leftData.get(position).type;
leftAdapter.isClickLeft = true;
//遍历右侧条目,并获取右侧条目的typeId,与刚刚获取的type对比,是否一致
for (int i = 0; i < rightData.size(); i++) {
if (type == rightData.get(i).typeId) {
//如果找到对应的条目,那就将右侧条目滚动至对应条目,并跳出循环
lv_right.smoothScrollToPosition(i);
currentLeftItem = i;
//左侧条目点击事件设置UI
leftAdapter.setCurrentSelect_Left(position);
//刷新数据适配器
leftAdapter.notifyDataSetChanged();
break;
}
}
// Toast.makeText(getActivity(),
// "您选中了"+leftData.get(position).title, Toast.LENGTH_SHORT).show();
}
});
//为右侧条目设置点击事件
lv_right.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
// Toast.makeText(getActivity(),
// "右侧条目被点击了"+position, Toast.LENGTH_SHORT).show();
//当右侧条目被点击时,获取被点击条目的typeId
int typeId = rightData.get(position).typeId;
leftAdapter.isClickLeft = false;
//遍历左侧条目
for (int i = 0; i < leftData.size(); i++) {
//获取左侧条目的type,与右侧条目的typeId对比是否一致
if (typeId == leftData.get(i).type) {
//说明找到了对应条目,跳出循环,设置当前被选中的条目
currentLeftItem = i;
//右侧滚动或点击设置对应的左侧条目UI
leftAdapter.setCurrentSelect_Right(currentLeftItem);
//刷新数据适配器
leftAdapter.notifyDataSetChanged();
break;
}
}
}
});
//为右侧条目添加滑动监听
lv_right.setOnScrollListener(this);
}
/**
*
* */
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
/**
*
* */
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
ProductRightBean data = rightData.get(firstVisibleItem);
leftAdapter.isClickLeft = false;
for (int i = 0; i < leftData.size(); i++) {
//获取左侧条目的type,与右侧条目的typeId对比是否一致
if (data.typeId == leftData.get(i).type) {
//说明找到了对应条目,跳出循环,设置当前被选中的条目
currentLeftItem = i;
//右侧滚动或点击设置对应的左侧条目UI
leftAdapter.setCurrentSelect_Right(currentLeftItem);
//刷新数据适配器
leftAdapter.notifyDataSetChanged();
break;
}
}
int firdtVisiblePositon = lv_left.getFirstVisiblePosition();
int lastVisiblePositon = lv_left.getLastVisiblePosition();
if (data.typeId >= lastVisiblePositon || data.typeId <= firdtVisiblePositon){
lv_left.setSelection(data.typeId);
}
// Log.i("ProductRightBean","" + data.typeId);
}
}

@ -0,0 +1,76 @@
package com.example.orangesale_02.fragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.example.orangesale_02.activity.MainActivity;
import com.example.orangesale_02.R;
public class BottomBar_profile extends Fragment {
public BottomBar_profile(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View view = inflater.inflate(R.layout.bottom_bar_profile, container, false);
return view;
}
//一般onCreateView()用于初始化Fragment的视图
// onViewCreated()一般用于初始化视图内各个控件,
// 而onCreate()用于初始化与Fragment视图无关的变量。
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (MainActivity.instance.loginIn) {
//从登录选项进入从textView获取个人信息
Intent intent = getActivity().getIntent();
Bundle bundle = intent.getExtras();
String username = bundle.getString("username");
String sex = bundle.getString("sex");
String city = bundle.getString("city");
TextView user_username = getActivity().findViewById(R.id.user_username1);
user_username.setText("用户名:"+username);
TextView user_sex = getActivity().findViewById(R.id.user_sex1);
user_sex.setText("性别:"+sex);
TextView user_city = getActivity().findViewById(R.id.user_city1);
user_city.setText("城市:"+city);
}else{
Intent intent = getActivity().getIntent();
Bundle bundle = intent.getExtras();
String username = bundle.getString("username");
String sex = bundle.getString("sex");
String city = bundle.getString("city");
TextView user_username = getActivity().findViewById(R.id.user_username1);
user_username.setText("用户名:"+username);
TextView user_sex = getActivity().findViewById(R.id.user_sex1);
user_sex.setText("性别:"+sex);
TextView user_city = getActivity().findViewById(R.id.user_city1);
user_city.setText("城市:"+city);
}
//点击事件
Button loginoutButton = (Button) getActivity().findViewById(R.id.loginout1);
loginoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//从fragment跳转到activity中
startActivity(new Intent(getActivity(), MainActivity.class));
}
});
}
}

@ -0,0 +1,75 @@
package com.example.orangesale_02.fragment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.Toast;
import com.example.orangesale_02.R;
import com.example.orangesale_02.adapter.ShouyeGridBaseA;
import com.example.orangesale_02.bean.ShouyeGridIcon;
import java.util.ArrayList;
public class BottomBar_shouye extends Fragment {
private Context mContext;
private GridView gridView;
private GridView firegridView;
private BaseAdapter mAdapter = null;
private ArrayList<ShouyeGridIcon> mData = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState){
View view = inflater.inflate(R.layout.bottom_bar_shouye, container, false);
return view;
}
//一般onCreateView()用于初始化Fragment的视图
// onViewCreated()一般用于初始化视图内各个控件,
// 而onCreate()用于初始化与Fragment视图无关的变量。
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
gridView = view.findViewById(R.id.gridview);
firegridView = view.findViewById(R.id.firegridview);
mData = new ArrayList<ShouyeGridIcon>();
mData.add(new ShouyeGridIcon(R.drawable.chicken, "chicken"));
mData.add(new ShouyeGridIcon(R.drawable.chicken_leg, "chicken_leg"));
mData.add(new ShouyeGridIcon(R.drawable.fish, "fish"));
mData.add(new ShouyeGridIcon(R.drawable.hamburger, "hamburger"));
mData.add(new ShouyeGridIcon(R.drawable.pig, "pig"));
mData.add(new ShouyeGridIcon(R.drawable.turkey, "turkey"));
mData.add(new ShouyeGridIcon(R.drawable.shrimp, "shrimp"));
mAdapter = new ShouyeGridBaseA(mData);
gridView.setAdapter(mAdapter);
firegridView.setAdapter(mAdapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
Toast.makeText(getActivity(),
"你点击了~" + position + "~项", Toast.LENGTH_SHORT).show();
}
});
firegridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
Toast.makeText(getActivity(),
"你点击了~" + position + "~项", Toast.LENGTH_SHORT).show();
}
});
}
}

@ -0,0 +1,16 @@
package com.example.orangesale_02.util
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.LayoutRes
/**
* 扩展方法用于获取View
* @receiver ViewGroup parent
* @param layoutResId Int
* @return View
*/
fun ViewGroup.getItemView(@LayoutRes layoutResId: Int): View {
return LayoutInflater.from(this.context).inflate(layoutResId, this, false)
}

@ -0,0 +1,94 @@
package com.example.orangesale_02.util;
/**
*
* @author llw
*/
public class Constant {
public static final String CAR_JSON = "{ \"code\" : 200 ,\n" +
" \"orderData\" : [\n" +
" {\n" +
"\n" +
" \"shopId\": 1,\n" +
" \"shopName\":\"京东自营\",\n" +
" \"cartlist\": [\n" +
" {\n" +
" \"id\": 1,\n" +
" \"shopId\": 1,\n" +
" \"shopName\": \"京东自营\",\n" +
" \"defaultPic\": \"https://img30.360buyimg.com/popWareDetail/jfs/t3208/194/7616404169/244198/369625db/58b7d093N03520fb7.jpg\",\n" +
" \"productId\": 1,\n" +
" \"productName\": \"三只松鼠_零食大礼包\",\n" +
" \"color\": \"黑色\",\n" +
" \"size\": \"18L\",\n" +
" \"price\": 20,\n" +
" \"count\":1\n" +
" },\n" +
" {\n" +
" \"id\": 2,\n" +
" \"shopId\": 1,\n" +
" \"shopName\": \"京东自营\",\n" +
" \"defaultPic\": \"https://img14.360buyimg.com/n0/jfs/t2971/15/167732091/93002/204c1016/574d9d9aNe4e6fa7a.jpg\",\n" +
" \"productId\": 2,\n" +
" \"productName\": \"小米心跳手环\",\n" +
" \"color\": \"白色\",\n" +
" \"size\": \"20XXL\",\n" +
" \"price\": 148,\n" +
" \"count\": 1\n" +
" }\n" +
" ]\n" +
" }\n" +
" ,\n" +
" {\n" +
" \"shopId\": 2,\n" +
" \"shopName\":\"海澜之家\",\n" +
" \"cartlist\": [\n" +
" {\n" +
" \"id\": 1,\n" +
" \"shopId\": 2,\n" +
" \"shopName\": \"海澜之家\",\n" +
" \"defaultPic\": \"https://img30.360buyimg.com/popWaterMark/jfs/t4075/83/1343091204/132469/9034cb9c/5873496bN68020ba8.jpg\",\n" +
" \"productId\": 1,\n" +
" \"productName\": \"短袖T恤男 2017夏季新品\",\n" +
" \"color\": \"蓝色\",\n" +
" \"size\": \"30X\",\n" +
" \"price\": 181,\n" +
" \"count\":1\n" +
" }\n" +
" ]\n" +
" }\n" +
" ,\n" +
" {\n" +
" \"shopId\": 3,\n" +
" \"shopName\":\"OPPO官方旗舰店\",\n" +
" \"cartlist\": [\n" +
" {\n" +
" \"id\": 1,\n" +
" \"shopId\": 3,\n" +
" \"shopName\": \"OPPO官方旗舰店\",\n" +
" \"defaultPic\": \"https://img10.360buyimg.com/cms/jfs/t6064/272/2163314583/157700/442d6477/593c1c49N7c63a7d9.jpg\",\n" +
" \"productId\": 1,\n" +
" \"productName\": \"OPPO R11 全网通\",\n" +
" \"color\": \"蓝色\",\n" +
" \"size\": \"30X\",\n" +
" \"price\": 1999,\n" +
" \"count\":1\n" +
" },\n" +
" {\n" +
" \"id\": 2,\n" +
" \"shopId\": 3,\n" +
" \"shopName\": \"OPPO官方旗舰店\",\n" +
" \"defaultPic\": \"https://img14.360buyimg.com/n0/jfs/t3142/194/4953241722/254855/1651c2b1/585b9021Nf653e48a.jpg\",\n" +
" \"productId\": 1,\n" +
" \"productName\": \"OPPO R9 全网通\",\n" +
" \"color\": \"蓝色\",\n" +
" \"size\": \"30X\",\n" +
" \"price\": 999,\n" +
" \"count\":1\n" +
" }\n" +
" ]\n" +
" }\n" +
"\n" +
" ]\n" +
"}";
}

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,41.02C26.431,41.02 27.431,42.33 28.734,42.621C30.037,42.913 31.131,42.993 32.251,42.5C34.47,41.522 35.822,40.358 37.463,38.619C40.505,35.395 42,30.963 42,25.029C42,19.094 40.4,16.027 37.933,14.02C35.467,12.014 34.037,11.63 31.055,12.014C28.073,12.398 26.449,15.602 24.008,15.602C21.568,15.602 18.593,12.443 16.006,12.014C13.418,11.585 12,12.014 9.76,14.02C7.519,16.027 6,19.151 6,25.029C6,30.907 7.552,35.265 10.593,38.488C12.234,40.228 13.53,41.522 15.748,42.5C16.869,42.993 18.027,42.913 19.284,42.621C20.542,42.33 21.542,41.02 24,41.02Z"
android:strokeWidth="4"
android:fillColor="#d6320e"
android:fillType="evenOdd"
android:strokeColor="#333"/>
<path
android:pathData="M24.009,15.602C24.794,7.868 28.128,4 34.011,4C34.551,5.628 34.69,7.203 34.43,8.726C34.306,9.45 33.921,10.482 33.276,11.822"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M14.229,26C13.952,27.346 13.952,28.731 14.229,30.157C14.505,31.582 15.094,32.682 15.996,33.456"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M33,19C31,14 33,4 24,4C15,4 17,14 15,18C13,22 10,25 10,31C10,40 17.5,44 24,44C30.5,44 38,40 38,31C38,26 35,24 33,19Z"
android:strokeWidth="4"
android:fillColor="#417505"
android:strokeColor="#333"/>
<path
android:pathData="M30,30C30,33.314 27.314,36 24,36C20.686,36 18,33.314 18,30C18,26.686 20.686,22.5 24,22.5C27.314,22.5 30,26.686 30,30Z"
android:strokeWidth="4"
android:fillColor="#417505"
android:strokeColor="#333"/>
</vector>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- <item android:color="#000000" android:state_checked="true" />-->
<item android:color="#969fa8" android:state_checked="false" />
<item android:color="@color/orange" android:state_checked="true" />
</selector>

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<group>
<clip-path
android:pathData="M0,0h48v48h-48z"/>
<path
android:pathData="M15.999,32C13.2,31.067 9.965,28.827 8.524,26.574C8.326,26.266 8.255,25.897 8.279,25.532L8.524,21.782C8.577,20.972 9.534,20.541 10.195,21.011C12.329,22.529 16.228,25 18.999,25C25.999,25 31.999,22.5 34.999,17"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M25.999,43C35.999,41 45.242,30.515 42.867,19.941L41.999,16L41.999,8L35.999,7C35.999,19.941 33,30 19.999,32C14.023,32.919 8.294,31.614 3.87,29.078L4.999,36C6.999,41 16,45 25.999,43Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#fcff05"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</group>
</vector>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:color="#000"
android:width="0.5dp"/>
</shape>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:color="#000"
android:width="0.5dp"/>
<corners android:topRightRadius="4dp"
android:bottomRightRadius="4dp" />
</shape>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke android:color="#000"
android:width="0.5dp"/>
<corners android:topLeftRadius="4dp"
android:bottomLeftRadius="4dp" />
</shape>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="20dp"/>
<gradient
android:startColor="#FF5C13"
android:endColor="#FC7D0B"
android:angle="90" />
</shape>

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFF"/>
<corners android:radius="8dp"/>
</shape>

@ -0,0 +1,38 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,39C33.389,39 41,31.941 41,22H7C7,31.941 14.611,39 24,39Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M18,38L16,44H32L30,38"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M12,10L12,14"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M36,10L36,14"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M24,5L24,14"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M15,24C15,24 14.5,27 16,33"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M37.567,12C38.728,14.811 40,18.642 40,21.938C40,25.815 38.655,33.35 37.685,38.277C37.141,41.042 34.703,43 31.885,43H16.042C13.257,43 10.839,41.086 10.28,38.357C9.314,33.637 8,26.402 8,21.938C8,18.259 9.444,14.632 10.827,12"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M11.587,6.457C11.771,6.172 12.087,6 12.426,6H35.574C35.913,6 36.229,6.172 36.413,6.457L39.001,10.457C39.432,11.122 38.954,12 38.162,12H9.838C9.046,12 8.568,11.122 8.999,10.457L11.587,6.457Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
</vector>

@ -0,0 +1,47 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M15.624,20.682C14.289,15.248 18.403,10 24,10V10C29.597,10 33.711,15.248 32.376,20.682L27.279,41.429C26.908,42.939 25.554,44 24,44V44C22.446,44 21.092,42.939 20.721,41.429L15.624,20.682Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
<path
android:pathData="M24,4L24,9.5"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M30.102,5.592L27.374,8.842"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M18,5.592L20.727,8.842"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M16,19H22"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M25,26H31"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M19,34H23"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,38 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M14,34m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#d0021b"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M35,37m-7,0a7,7 0,1 1,14 0a7,7 0,1 1,-14 0"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#d0021b"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M37,10C34.349,10.812 28.628,13.014 25.279,16.261C20.256,21.13 19,24.5 18,27"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M37,10C35.883,11.318 33.715,14.596 33.043,18.389C32.036,24.079 33,27.5 34,30"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M30,4L44,16"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,27 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M35.979,15.5C35.454,15.019 34.881,14.592 34.269,14.225L32.803,13.346C31.444,12.53 29.95,11.965 28.391,11.677L27.867,11.581C25.047,11.06 22.33,10.096 19.816,8.726C19.586,7.71 18.794,6.865 17.711,6.618C16.207,6.277 14.711,7.219 14.37,8.722C14.028,10.226 14.97,11.721 16.473,12.063C16.6,12.092 16.726,12.111 16.851,12.122C18.506,13.741 19.905,15.604 21,17.647"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M11.307,25.019C11.045,25.301 8,28.651 8,32C8,35.5 9.558,37 11,38C12.442,39 14.721,40 16.61,40C18.5,40 28.5,41 33,40C37.5,39 38,38 40,36C41.082,34.918 41.882,33.398 42.389,32.23C42.88,31.099 43.265,29.924 43.565,28.728C43.925,27.292 44.288,25.23 44,23.5C43.5,20.5 42,18.5 37,16C32.396,13.698 28.353,14.788 27.742,14.974C27.687,14.991 27.635,15.009 27.581,15.029C26.781,15.312 20.316,17.625 17.571,19.5C14.769,21.414 11.609,24.702 11.343,24.981C11.329,24.995 11.32,25.005 11.307,25.019Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M6.103,20.009C5.977,19.998 5.851,19.979 5.725,19.95C4.222,19.608 3.28,18.113 3.622,16.609C3.963,15.106 5.459,14.164 6.963,14.505C8.046,14.752 8.838,15.597 9.068,16.613C11.582,17.983 14.299,18.948 17.119,19.468L17.643,19.565C19.202,19.852 20.696,20.417 22.055,21.233L23.521,22.112C24.5,22.7 25.379,23.442 26.123,24.309L26.529,24.781C27.753,26.207 28.31,28.088 28.061,29.95L28.033,30.162C27.864,31.431 27.289,32.612 26.396,33.529L25.934,34.002C24.409,35.567 22.215,36.285 20.059,35.926C18.392,35.648 16.849,34.871 15.634,33.696L14.895,32.982C14.301,32.408 13.786,31.757 13.363,31.047L11.191,27.395L10.557,26.125C9.422,23.849 7.916,21.783 6.103,20.009Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,37 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<group>
<clip-path
android:pathData="M0,0h48v48h-48z"/>
<path
android:pathData="M33.375,33.874C37.618,29.632 34.789,15.49 28.425,9.126C25.597,6.297 17.465,0.287 8.626,9.126C-0.213,17.964 5.798,26.096 8.626,28.925C14.99,35.289 29.132,38.117 33.375,33.874Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M41,41C40.253,40.253 36.022,36.022 34,34"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M42.193,40.071m1.768,-1.768a2.5,2.5 0,1 1,-3.536 3.536a2.5,2.5 0,1 1,3.536 -3.536"
android:fillColor="#333"/>
<path
android:pathData="M40.072,42.192m1.768,-1.768a2.5,2.5 0,1 1,-3.536 3.536a2.5,2.5 0,1 1,3.536 -3.536"
android:fillColor="#333"/>
<path
android:pathData="M17,18m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M12,21m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M17,24m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
</group>
</vector>

@ -0,0 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<group>
<clip-path
android:pathData="M0,0h48v48h-48z"/>
<path
android:pathData="M21.168,16.594C22.816,10.987 29.491,8.666 34.261,12.042C38.387,14.96 39.079,20.808 35.75,24.609L32.619,28.183C27.4,34.142 20.809,38.741 13.416,41.584L9.858,42.952C9.128,43.232 8.306,43.13 7.668,42.678C6.395,41.778 6.343,39.908 7.564,38.938L10.343,36.73C14.508,33.422 17.549,28.907 19.049,23.803L21.168,16.594Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M29.842,10.684C30.694,8.097 33.482,6.691 36.068,7.543C38.655,8.395 40.061,11.183 39.209,13.77C38.898,14.712 38.331,15.498 37.61,16.075"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M42,4L38,8"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</group>
</vector>

@ -0,0 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,44C35.046,44 44,35.046 44,24C44,12.954 35.046,4 24,4C12.954,4 4,12.954 4,24C4,35.046 12.954,44 24,44Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
<path
android:pathData="M31,17L24,24L17,17"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M31,26L24,33L17,26"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,53 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M36,37L33.209,43.4C33.05,43.764 32.69,44 32.292,44H15.708C15.31,44 14.95,43.764 14.791,43.4L12,37"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M12,11L14.791,4.6C14.95,4.236 15.31,4 15.708,4H32.292C32.69,4 33.05,4.236 33.209,4.6L36,11"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M12,12C12,10.895 12.895,10 14,10H34C35.105,10 36,10.895 36,12V36C36,37.105 35.105,38 34,38H14C12.895,38 12,37.105 12,36V12Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M13,22.5L19.396,21.49C21.405,21.173 23.246,20.18 24.614,18.675V18.675C26.438,16.668 29.075,15.599 31.782,15.768L35.5,16"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M12.5,32.5L18.053,32.248C21.428,32.094 24.47,30.167 26.051,27.181V27.181C27.294,24.834 29.458,23.111 32.025,22.427L35.5,21.5"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M36,12V32"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M12,16V36"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,19 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M9.781,9.752C9.906,8.751 10.757,8 11.766,8H36.234C37.243,8 38.094,8.751 38.219,9.752L41.719,37.752C41.868,38.946 40.937,40 39.734,40H8.266C7.063,40 6.132,38.946 6.281,37.752L9.781,9.752Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M15,18C15,18 17,22 24,22C31,22 33,18 33,18"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,40 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M4,19.313V9H44V19.313C41.882,20.068 40.364,22.105 40.364,24.5C40.364,26.895 41.882,28.932 44,29.687V40H4V29.687C6.119,28.932 7.636,26.895 7.636,24.5C7.636,22.105 6.119,20.068 4,19.313Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M19,16L24,21L29,16"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M18,22H30"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M18,28.167H30"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M24,22V34"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M36,18L24,30L12,18"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,12 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,44C32.235,44 39,37.474 39,29.098C39,27.042 38.895,24.837 37.756,21.412C36.616,17.986 36.386,17.544 35.181,15.428C34.666,19.745 31.911,21.545 31.211,22.083C31.211,21.523 29.545,15.336 27.018,11.634C24.537,8 21.163,5.616 19.185,4C19.185,7.07 18.322,11.634 17.085,13.959C15.849,16.285 15.617,16.37 14.072,18.1C12.528,19.831 11.819,20.365 10.527,22.465C9.236,24.565 9,27.362 9,29.418C9,37.794 15.765,44 24,44Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#e70e0e"
android:strokeColor="#e70e0e"/>
</vector>

@ -0,0 +1,62 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<group>
<clip-path
android:pathData="M0,0h48v48h-48z"/>
<path
android:pathData="M15.381,32.844C9.724,31.429 0.531,34.965 9.724,38.501C13.259,47.693 16.795,38.501 15.381,32.844Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M22.482,10.248C17.579,10.234 11.25,11.784 10.453,13.975C9.876,15.564 12.878,17.677 16.704,18.793"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M37.978,25.742C37.991,30.646 36.441,36.974 34.25,37.771C32.661,38.349 30.548,35.347 29.432,31.521"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M37.999,25.765C44.662,19.7 40.125,8.091 40.125,8.091C40.125,8.091 28.108,4.56 22.451,10.216C16.794,15.873 15.38,32.844 15.38,32.844C15.38,32.844 31.336,31.829 37.999,25.765Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M38.007,25.773C38.007,25.773 31.29,24.712 27.401,20.823C23.512,16.934 22.451,10.217 22.451,10.217"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M33.766,14.459m-1.414,-1.414a2,2 119.055,1 1,2.828 2.828a2,2 119.055,1 1,-2.828 -2.828"
android:fillColor="#333"/>
<path
android:pathData="M41,20.945C40.459,22.704 39.521,24.379 37.999,25.765C36.352,27.264 34.136,28.455 31.734,29.398"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M27,7.656C25.303,8.145 23.718,8.95 22.451,10.217C21.267,11.401 20.268,13.083 19.429,15"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</group>
</vector>

@ -0,0 +1,28 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M44,22C44,12.059 35.046,4 24,4C12.954,4 4,12.059 4,22H44Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:fillType="evenOdd"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M4,38h40v6h-40z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M4,28L9.455,32L16.727,28L24,32L31.273,28L38.546,32L44,28"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,25 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M9,18V42H39V18L24,6L9,18Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M19,29V42H29V29H19Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M9,42H39"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<vector xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:pathData="M12,22.5c-5.79,0 -10.5,-4.71 -10.5,-10.5S6.21,1.5 12,
1.5 22.5,6.21 22.5,12 17.79,22.5 12,22.5zM12,3c-4.963,0 -9,4.037 -9,9s4.037,9 9,9 9,
-4.037 9,-9S16.963,3 12,3z"
android:fillColor="#a9b7b7"/>
</vector>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#eb4f38"
android:pathData="M12,1.546c-5.764,0 -10.454,4.69 -10.454,10.454 0,
5.765 4.689,10.454 10.454,10.454S22.454,17.765 22.454,12C22.454,6.236 17.765,1.546 12,
1.546zM17.044,10.276 L11.039,16.346c-0.001,0.001 -0.005,0.002 -0.006,
0.005 -0.002,0.001 -0.002,0.005 -0.005,0.006 -0.048,0.046 -0.107,
0.075 -0.163,0.107 -0.028,0.016 -0.05,0.04 -0.08,0.051 -0.09,
0.036 -0.185,0.055 -0.28,0.055 -0.096,0 -0.193,-0.019 -0.284,-0.056 -0.03,-0.013 -0.054,
-0.038 -0.082,-0.054 -0.056,-0.031 -0.113,-0.059 -0.161,-0.107 -0.001,-0.001 -0.002,
-0.005 -0.004,-0.006 -0.001,-0.002 -0.005,-0.002 -0.006,-0.005l-2.954,-3.035c-0.289,
-0.297 -0.282,-0.772 0.015,-1.061 0.297,-0.288 0.771,-0.283 1.061,0.015l2.42,2.487 5.467,
-5.527c0.291,-0.295 0.767,-0.298 1.061,-0.006C17.333,9.506 17.335,9.981 17.044,10.276z" />
</vector>

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:tint="#616161"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="@android:color/white"
android:pathData="M7,18c-1.1,0 -1.99,0.9 -1.99,2S5.9,22 7,22s2,-0.9 2,-2 -0.9,-2 -2,-2zM1,3c0,0.55 0.45,1 1,1h1l3.6,7.59 -1.35,2.44C4.52,15.37 5.48,17 7,17h11c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L7,15l1.1,-2h7.45c0.75,0 1.41,-0.41 1.75,-1.03l3.58,-6.49c0.37,-0.66 -0.11,-1.48 -0.87,-1.48L5.21,4l-0.67,-1.43c-0.16,-0.35 -0.52,-0.57 -0.9,-0.57L2,2c-0.55,0 -1,0.45 -1,1zM17,18c-1.1,0 -1.99,0.9 -1.99,2s0.89,2 1.99,2 2,-0.9 2,-2 -0.9,-2 -2,-2z" />
</vector>

@ -0,0 +1,25 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M22.868,24.298C25.41,26.794 26.414,30.453 25.497,33.886C24.58,37.32 21.884,40.002 18.433,40.914C14.981,41.826 11.302,40.828 8.794,38.299C5.022,34.414 5.076,28.239 8.915,24.421C12.754,20.602 18.961,20.548 22.866,24.3L22.868,24.298Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M23,24L40,7"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M30.305,16.9L35.734,22.3L42.067,16L36.639,10.6L30.305,16.9Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
</vector>

@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,44C24,44 39,32 39,19C39,10.716 32.284,4 24,4C15.716,4 9,10.716 9,19C9,32 24,44 24,44Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M24,25C27.314,25 30,22.314 30,19C30,15.686 27.314,13 24,13C20.686,13 18,15.686 18,19C18,22.314 20.686,25 24,25Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
</vector>

@ -0,0 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M8,22L40,22A2,2 0,0 1,42 24L42,42A2,2 0,0 1,40 44L8,44A2,2 0,0 1,6 42L6,24A2,2 0,0 1,8 22z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M14,22V14C14,8.477 18.477,4 24,4C29.523,4 34,8.477 34,14V22"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M24,30V36"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,32 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M41,26C41,35.941 35,44 24,44C13,44 7,35.941 7,26C7,22.32 8.104,18.897 10,16.046C13.225,11.196 17.739,13 24,13C30.261,13 34.775,11.196 38,16.046C39.896,18.897 41,22.32 41,26Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#f5a623"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M26,13L29,9H26L24,7L22,9H19L22,13"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M18,20m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M15,27m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M21,25m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M18,32m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
</vector>

@ -0,0 +1,52 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<group>
<clip-path
android:pathData="M0,0h48v48h-48z"/>
<path
android:pathData="M34.151,34.849C42.352,26.648 42.352,13.352 34.151,5.151L4.452,34.849C12.653,43.05 25.95,43.05 34.151,34.849Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#f8e71c"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M19.301,20L34.15,34.849"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M19.302,20V41.213"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M19.302,20L39.808,20.707"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M39.755,14.997C41.419,21.877 39.566,29.434 34.195,34.805C28.823,40.177 21.266,42.03 14.386,40.365"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M14.352,24.95L22.837,16.464"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</group>
</vector>

@ -0,0 +1,30 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M10.077,13.432C15.047,7.87 23.687,10.315 27,12C28.657,11.368 33.197,10.643 36.179,12.665C39.907,15.193 44.603,21.904 40.254,31.384C36.775,38.968 27.689,42.158 24.376,43C21.891,41.947 16.43,39.832 10.607,34.552C5.326,29.764 3.865,20.383 10.077,13.432Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
<path
android:pathData="M27,12C25.076,12.75 21.228,14.25 19.129,18.75C16.874,23.586 18.605,27.75 19.129,30"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M21,4C21.333,4.167 23.5,4.5 24,6.5C24.437,8.249 23.667,9.333 23.5,10.5"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M28.479,11.328C27.525,11.295 26.867,10.455 27.063,9.521C27.333,8.234 27.945,6.477 29.33,5.392C30.713,4.308 32.566,4.133 33.881,4.179C34.834,4.212 35.493,5.052 35.297,5.986C35.027,7.274 34.414,9.031 33.03,10.115C31.646,11.2 29.794,11.374 28.479,11.328Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
</vector>

@ -0,0 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M16.639,12.746C17.948,9.856 20.827,8 24,8C27.173,8 30.052,9.856 31.361,12.746L34.421,19.5L38.107,25.822C40.394,29.745 39.712,34.722 36.454,37.885L35.265,39.041C32.352,41.869 27.784,42.072 24.631,39.513C24.264,39.214 23.736,39.214 23.369,39.513C20.216,42.072 15.648,41.869 12.735,39.041L11.545,37.885C8.288,34.722 7.606,29.745 9.893,25.822L13.579,19.5L16.639,12.746Z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
<path
android:pathData="M21.5,4C22.167,4.5 23.6,5.9 24,7.5C24.4,9.1 24.167,10.833 24,11.5"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M16,28m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#4a4a4a"/>
<path
android:pathData="M18,34m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#4a4a4a"/>
<path
android:pathData="M23,30m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#4a4a4a"/>
</vector>

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,20C27.866,20 31,16.866 31,13C31,9.134 27.866,6 24,6C20.134,6 17,9.134 17,13C17,16.866 20.134,20 24,20Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M6,40.8V42H42V40.8C42,36.32 42,34.079 41.128,32.368C40.361,30.863 39.137,29.639 37.632,28.872C35.921,28 33.68,28 29.2,28H18.8C14.32,28 12.079,28 10.368,28.872C8.863,29.639 7.639,30.863 6.872,32.368C6,34.079 6,36.32 6,40.8Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,29 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M14.054,9.644C14.596,10.186 15.073,10.815 15.468,11.489C17.927,9.952 20.835,9.063 23.951,9.063C27.097,9.063 30.032,9.969 32.506,11.535C32.905,10.843 33.392,10.198 33.946,9.644C36.467,7.128 40.892,6.02 42.937,8.061C44.982,10.101 43.871,14.517 41.35,17.033C40.602,17.781 39.685,18.403 38.712,18.857C39.511,20.756 39.952,22.842 39.952,25.031C39.952,33.851 32.788,41 23.951,41C15.114,41 7.95,33.851 7.95,25.031C7.95,22.828 8.397,20.728 9.206,18.818C8.264,18.368 7.377,17.76 6.65,17.033C4.128,14.517 3.018,10.101 5.063,8.061C7.108,6.02 11.533,7.128 14.054,9.644Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M16,29a8,7 0,1 0,16 0a8,7 0,1 0,-16 0z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M17,18m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M21,29m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M31,18m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
<path
android:pathData="M27,29m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
</vector>

@ -0,0 +1,62 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M20.5,14.5C20,14 20,13.149 20,11C20,7.134 24,4 24,4C24,4 27,7.134 27,11C27,12.922 27,14 26.5,14.5"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M17,17C15.789,14.082 12.862,10.433 11,9C16.411,7.986 20.774,11.301 23,14"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M30,16C31.452,13.303 34.304,10.305 36,9C30.357,7.942 26.129,11.261 24,14"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M16.725,17.374C16.176,17.861 15.6,18.401 15,19C10.81,23.191 10.102,30.864 10.003,34.28C9.969,35.43 9.977,36.602 10.412,37.667C10.879,38.811 11.875,40.405 14.001,42C18.001,45 30.001,45 34,42C36.117,40.413 37.113,38.825 37.582,37.682C38.023,36.608 38.031,35.424 37.997,34.263C37.896,30.838 37.184,23.183 33.001,19C32.401,18.401 31.825,17.861 31.275,17.374C27.017,13.607 20.984,13.607 16.725,17.374Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M32,18L11,29"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M16,18L37,29"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M35,41L11,27"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M37,27L13,41"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,34 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M15,10m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M33,10m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M10,20H20L18,42H12L10,20Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M28,20H38L40,31H37L36,42H30L29,31H26L28,20Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,23 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M17,14L31,14A13,13 0,0 1,44 27L44,27A13,13 0,0 1,31 40L17,40A13,13 0,0 1,4 27L4,27A13,13 0,0 1,17 14z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
<path
android:pathData="M16,27a8,13 0,1 0,16 0a8,13 0,1 0,-16 0z"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"/>
<path
android:pathData="M30,6H27C25.343,6 24,7.343 24,9V14"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,26 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M20.5,41.5m-3.5,0a3.5,3.5 0,1 1,7 0a3.5,3.5 0,1 1,-7 0"
android:fillColor="#333"/>
<path
android:pathData="M37.5,41.5m-3.5,0a3.5,3.5 0,1 1,7 0a3.5,3.5 0,1 1,-7 0"
android:fillColor="#333"/>
<path
android:pathData="M5,6L14,12L19,34H39L44,17H25"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M25,26L32.273,26L41,26"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,28 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M20.623,11H39C39,11 39,16 36,19C33,22 30,23 29,23C28,23 18.5,24 16,26C13.5,28 12.001,31.5 16,35C19.999,38.5 27,40 32,38C37,36 40,30 40,30L44,40C44,40 36,43 29,44C21.999,45 15,44 9,38C2.999,32 1.999,24.5 6.999,18C11.166,12.584 17.414,11.334 19.382,11.067C19.795,11.011 20.207,11 20.623,11Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M26,23L20,11"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M18,4H32C35.866,4 39,7.134 39,11V11"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M30,16m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0"
android:fillColor="#333"/>
</vector>

@ -0,0 +1,20 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="43dp"
android:height="43dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M24,44C35.046,44 44,36.613 44,27.5C44,21.058 39.525,15.701 33,12.984L29.5,14.5L30,20L23.5,18L17,20V14.5L14,12.984C8.022,15.837 4,21.393 4,27.5C4,36.613 12.954,44 24,44Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
<path
android:pathData="M23.5,4L27.309,9.117L36,9.91L29.663,14.483L31.5,21L23.5,18L15.5,21L17.337,14.483L11,9.91L19.691,9.117L23.5,4Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#4a4a4a"
android:strokeLineCap="round"/>
</vector>

@ -0,0 +1,37 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M4,36H44L39,44H9L4,36Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M11,30V36H37L37,31C37,25 34,23 34,23C36,20.5 37,17 34,15C31,13 28.5,15 27,17C27,17 11,15 11,30Z"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M21,24C21,24 20,24.5 19,26C18,27.5 18,29 18,29"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"
android:strokeLineCap="round"/>
<path
android:pathData="M39,9C38.467,9.64 35.444,13.267 34,15"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#333"/>
<path
android:pathData="M38.356,7.483m-2.046,-1.437a2.5,2.5 64.411,1 1,4.092 2.873a2.5,2.5 64.411,1 1,-4.092 -2.873"
android:fillColor="#333"/>
<path
android:pathData="M40.811,9.206m-2.046,-1.437a2.5,2.5 119.932,1 1,4.092 2.873a2.5,2.5 119.932,1 1,-4.092 -2.873"
android:fillColor="#333"/>
</vector>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save