Bladeren bron

事件详情

zhanghongrui 3 weken geleden
bovenliggende
commit
a81834b665
47 gewijzigde bestanden met toevoegingen van 2658 en 12 verwijderingen
  1. 2 0
      app/build.gradle
  2. 3 0
      app/src/main/AndroidManifest.xml
  3. 30 0
      app/src/main/assets/json_list.json
  4. 27 0
      app/src/main/assets/json_list2.json
  5. 153 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/EventDetailsActivity.java
  6. 0 1
      app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/WaterCraneResourcesActivity.java
  7. 9 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/OnResourcesClick.java
  8. 102 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/RecycleviewLeftAdapter.java
  9. 168 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/RecycleviewRightAdapter.java
  10. 79 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/CommonDateBean.java
  11. 29 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/ResourcesListBean.java
  12. 78 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventDetailsFragment.java
  13. 5 5
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventFragment.java
  14. 47 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventMessageFragment.java
  15. 289 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventNearByFragment.java
  16. 0 1
      app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainFragment.java
  17. 53 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/net/EventDetailsRequest.java
  18. 4 2
      app/src/main/java/com/sjkj/appthreefloor_tsgz/net/RetrofitService.java
  19. 874 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/GaoDeBottomSheetBehavior.java
  20. 28 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/JsonUtil.java
  21. 91 0
      app/src/main/java/com/sjkj/appthreefloor_tsgz/weight/CustomRecycleView.java
  22. BIN
      app/src/main/res/drawable-xxhdpi/icon_back.png
  23. BIN
      app/src/main/res/drawable-xxhdpi/icon_choose.png
  24. BIN
      app/src/main/res/drawable-xxhdpi/icon_dx.png
  25. BIN
      app/src/main/res/drawable-xxhdpi/icon_dxxz.png
  26. BIN
      app/src/main/res/drawable-xxhdpi/icon_event_current.png
  27. BIN
      app/src/main/res/drawable-xxhdpi/icon_event_current_select.png
  28. BIN
      app/src/main/res/drawable-xxhdpi/icon_event_daohang.png
  29. BIN
      app/src/main/res/drawable-xxhdpi/icon_xia.png
  30. 7 0
      app/src/main/res/drawable/bg_event_completed.xml
  31. 7 0
      app/src/main/res/drawable/bg_event_completed_select.xml
  32. 7 0
      app/src/main/res/drawable/bg_event_finish.xml
  33. 7 0
      app/src/main/res/drawable/bg_event_refuse.xml
  34. 9 0
      app/src/main/res/drawable/rounded_corners10.xml
  35. 9 0
      app/src/main/res/drawable/rounded_left_right.xml
  36. 9 0
      app/src/main/res/drawable/rounded_leftbootom_rightbootom.xml
  37. 48 0
      app/src/main/res/layout/activity_event_details.xml
  38. 197 0
      app/src/main/res/layout/fragment_event_details.xml
  39. 31 0
      app/src/main/res/layout/fragment_event_message.xml
  40. 137 0
      app/src/main/res/layout/fragment_event_nearby.xml
  41. 35 0
      app/src/main/res/layout/item_classify_right_ziyuan.xml
  42. 59 0
      app/src/main/res/layout/item_classify_right_ziyuan2.xml
  43. 10 0
      app/src/main/res/layout/item_classify_rv_adapter.xml
  44. 8 0
      app/src/main/res/values/attrs.xml
  45. 4 0
      app/src/main/res/values/colors.xml
  46. 1 1
      app/src/main/res/values/strings.xml
  47. 2 2
      base-lib/src/main/res/layout/title_layout.xml

+ 2 - 0
app/build.gradle

@@ -77,6 +77,8 @@ dependencies {
     implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
     implementation "androidx.core:core-ktx:1.5.0"
     implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'
+    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0'
 
 
 }

+ 3 - 0
app/src/main/AndroidManifest.xml

@@ -128,6 +128,9 @@
             android:name="com.sjkj.appthreefloor_tsgz.activity.NewEventActivity"
             android:screenOrientation="portrait" />
         <activity
+            android:name="com.sjkj.appthreefloor_tsgz.activity.EventDetailsActivity"
+            android:screenOrientation="portrait" />
+        <activity
             android:name="com.sjkj.appthreefloor_tsgz.weight.photoview.PhotoViewActivity"
             android:screenOrientation="portrait"
             android:theme="@style/AppNoTitleTheme" />

+ 30 - 0
app/src/main/assets/json_list.json

@@ -0,0 +1,30 @@
+{
+  "code": 200,
+  "data": [
+    {
+      "name": "消防力量",
+      "value": "fireforce"
+    },
+    {
+      "name": "消防栓",
+      "value": "firehydrant"
+    },
+    {
+      "name": "泡沫液",
+      "value": "foamliquid"
+    },
+    {
+      "name": "专职站",
+      "value": "fulltimestation"
+    },
+    {
+      "name": "重点场所",
+      "value": "keyplace"
+    },
+    {
+      "name": "其他联动力量",
+      "value": "otherlinkageforce"
+    }
+  ],
+  "msg": "操作成功"
+}

+ 27 - 0
app/src/main/assets/json_list2.json

@@ -0,0 +1,27 @@
+{
+  "code": 200,
+  "data": [
+    {
+      "distance": "60283.59",
+      "id": "1c6d2c6bb5a84077be00f1d96396c2b0",
+      "latitude": "43.83689",
+      "longitude": "125.47588",
+      "name": "1号取水口"
+    },
+    {
+      "distance": "73875.52",
+      "id": "624c04ded04b45a6b135826a9e081765",
+      "latitude": "43.82005",
+      "longitude": "125.3001",
+      "name": "仁和"
+    },
+    {
+      "distance": "83918.36",
+      "id": "824514d969224a848fa7136dda68ce39",
+      "latitude": "43.90767",
+      "longitude": "125.19573",
+      "name": "全安"
+    }
+  ],
+  "msg": "操作成功"
+}

+ 153 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/EventDetailsActivity.java

@@ -0,0 +1,153 @@
+package com.sjkj.appthreefloor_tsgz.activity;
+
+import android.graphics.drawable.Drawable;
+import android.util.Log;
+
+import androidx.core.content.ContextCompat;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentPagerAdapter;
+import androidx.lifecycle.ViewModelProvider;
+
+import com.google.android.material.tabs.TabLayout;
+import com.gyf.immersionbar.ImmersionBar;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.viewModel.EventCenterViewModel;
+import com.sjkj.appthreefloor_tsgz.databinding.ActivityEventDetailsBinding;
+import com.sjkj.appthreefloor_tsgz.fragment.EventDetailsFragment;
+import com.sjkj.appthreefloor_tsgz.fragment.EventMessageFragment;
+import com.sjkj.appthreefloor_tsgz.fragment.EventNearByFragment;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseActivity;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EventDetailsActivity extends BaseActivity {
+    private EventCenterViewModel viewModel;
+    private ActivityEventDetailsBinding binding;
+    private boolean isauthorization = false;
+    private String[] fragmentNames = new String[]{"事件", "消息", "附近"};
+    private List<Fragment> fragmentArrayList = new ArrayList<>();
+    private EventDetailsFragment eventDetailsFragment = new EventDetailsFragment();
+    private EventMessageFragment eventMessageFragment = new EventMessageFragment();
+    private EventNearByFragment eventNearByFragment = new EventNearByFragment();
+
+    private void requestPermissionsReadAndWrite() {
+        XXPermissions.with(AppManager.getAppManager().currentActivity())
+                .permission(Permission.MANAGE_EXTERNAL_STORAGE)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(List<String> permissions, boolean all) {
+                        if (all) {
+                            isauthorization = true;
+                        } else {
+                            ToastUtils.show("获取部分权限成功,但部分权限未正常授予");
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(List<String> permissions, boolean never) {
+                        if (never) {
+                            ToastUtils.show("被永久拒绝授权,请手动授予权限");
+                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
+                            XXPermissions.startPermissionActivity(AppManager.getAppManager().currentActivity(), permissions);
+                        } else {
+                            ToastUtils.show("获取权限失败");
+                        }
+                    }
+                });
+    }
+
+    @Override
+    protected int initLayout() {
+        return R.layout.activity_event_details;
+    }
+
+    @Override
+    public void initBinding() {
+        binding = (ActivityEventDetailsBinding) getViewDataBinding();
+        viewModel = new ViewModelProvider(this, new ViewModelProvider.NewInstanceFactory()).get(EventCenterViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+    }
+
+
+    @Override
+    public void initListener() {
+        super.initListener();
+        binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
+            @Override
+            public void onTabSelected(TabLayout.Tab tab) {
+//                viewModel.eventStatus.set(tab.getText().toString());
+//                viewModel.eventStatusValue.set(tab.getTag().toString());
+                binding.viewPager.setCurrentItem(tab.getPosition());
+                if (tab.getText().toString().equals("事件")) {
+                    getTitleView().setText("事件详情");
+                } else {
+                    getTitleView().setText(tab.getText().toString());
+                }
+
+            }
+
+            @Override
+            public void onTabUnselected(TabLayout.Tab tab) {
+
+            }
+
+            @Override
+            public void onTabReselected(TabLayout.Tab tab) {
+
+            }
+        });
+    }
+
+    @Override
+    public void initView() {
+        super.initView();
+        ImmersionBar.with(EventDetailsActivity.this)
+                .fitsSystemWindows(true)  //使用该属性,必须指定状态栏颜色
+                .statusBarDarkFont(true, 0.2f)
+                .statusBarColor(R.color.white)
+                .init();
+        requestPermissionsReadAndWrite();
+
+        // viewModel.eventCode.set(getIntent().getStringExtra("eventCode"));
+        viewModel.eventId.set(getIntent().getStringExtra("id"));
+        Log.d("zhr111id=", viewModel.eventId.get());
+        getTitleView().setText("事件详情");
+        getTitleView().setTextColor(getResources().getColor(R.color.black));
+        int drawableLeft = R.drawable.icon_back; // 替换为你的drawable资源ID
+        Drawable drawable = ContextCompat.getDrawable(EventDetailsActivity.this, drawableLeft);
+        if (drawable != null) {
+            getBackView().setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, null, null, null); // 使用Relative版本以支持RTL布局方向
+        }
+        getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.color.white));
+
+        fragmentArrayList.add(eventDetailsFragment);
+        fragmentArrayList.add(eventMessageFragment);
+        fragmentArrayList.add(eventNearByFragment);
+        binding.viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
+            @Override
+            public Fragment getItem(int position) {
+                return fragmentArrayList.get(position);
+            }
+
+            @Override
+            public int getCount() {
+                return fragmentArrayList.size();
+            }
+
+            @Override
+            public CharSequence getPageTitle(int position) {
+                return fragmentNames[position];
+            }
+        });
+
+        binding.tabLayout.setupWithViewPager(binding.viewPager);
+    }
+
+}

+ 0 - 1
app/src/main/java/com/sjkj/appthreefloor_tsgz/activity/WaterCraneResourcesActivity.java

@@ -174,7 +174,6 @@ public class WaterCraneResourcesActivity extends BaseActivity {
     public void loadData() {
         super.loadData();
         showLoadingDialog();
-        Log.d("ZHR11111",getIntent().getDoubleExtra("Longitude",0.0)+"");
         requestListRefresh();
     }
 }

+ 9 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/OnResourcesClick.java

@@ -0,0 +1,9 @@
+package com.sjkj.appthreefloor_tsgz.adapter;
+
+
+public interface OnResourcesClick {
+
+    void delete(String type, int positio);
+
+    void Add(String type, int positio);
+}

+ 102 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/RecycleviewLeftAdapter.java

@@ -0,0 +1,102 @@
+package com.sjkj.appthreefloor_tsgz.adapter;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.bean.ResourcesListBean;
+
+import java.util.List;
+
+
+public class RecycleviewLeftAdapter extends RecyclerView.Adapter<RecycleviewLeftAdapter.MyViewHolder> implements View.OnClickListener {
+
+    private List<ResourcesListBean> mDatas;
+    private Context mContext;
+    private LayoutInflater inflater;
+
+    private int selectedPosition = 0;
+
+    private OnItemClickListener mOnItemClickListener = null;
+    private View viewClassify;
+
+    //define interface
+    public static interface OnItemClickListener {
+        void onItemClick(View view, int position);
+    }
+
+
+    public RecycleviewLeftAdapter(Context context, List<ResourcesListBean> datas) {
+        this.mContext = context;
+        this.mDatas = datas;
+        inflater = LayoutInflater.from(mContext);
+    }
+
+    @Override
+    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        View view = inflater.inflate(R.layout.item_classify_rv_adapter, parent, false);
+        MyViewHolder holder = new MyViewHolder(view);
+        view.setOnClickListener(this);
+        return holder;
+    }
+
+    @Override
+    public void onBindViewHolder(MyViewHolder holder, int position) {
+        holder.tv.setText(mDatas.get(position).getName());
+        //选中和没选中时,设置不同的颜色
+        if (position == selectedPosition) {
+            holder.tv.setBackgroundColor(Color.WHITE);
+            holder.tv.setTextColor(Color.BLACK);
+
+        } else {
+            holder.tv.setBackgroundColor(mContext.getResources().getColor(R.color.recyclerview_left_select));
+            holder.tv.setTextColor(mContext.getResources().getColor(R.color.recyclerview_lefttext_select));
+
+        }
+        holder.itemView.setTag(position);
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return mDatas.size();
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (mOnItemClickListener != null) {
+            //注意这里使用getTag方法获取position
+            mOnItemClickListener.onItemClick(view, (int) view.getTag());
+        }
+    }
+
+    public void setOnItemClickListener(OnItemClickListener listener) {
+        this.mOnItemClickListener = listener;
+    }
+
+    public void setSelectedPosition(int selectedPosition) {
+        this.selectedPosition = selectedPosition;
+    }
+
+    public int getSelectedPosition() {
+        return selectedPosition;
+    }
+
+
+    class MyViewHolder extends RecyclerView.ViewHolder {
+
+        TextView tv;
+
+        public MyViewHolder(View view) {
+            super(view);
+            tv = (TextView) view.findViewById(R.id.classsify_tv);
+        }
+    }
+
+}

+ 168 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/adapter/RecycleviewRightAdapter.java

@@ -0,0 +1,168 @@
+package com.sjkj.appthreefloor_tsgz.adapter;
+
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.bean.CommonDateBean;
+
+import java.util.List;
+
+
+/**
+ * Created by lenovo on 2017/12/8.
+ */
+
+public class RecycleviewRightAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+    private OnItemClickListener mOnItemClickListener = null;
+    private List<CommonDateBean> mDatas;
+    private Context mContext;
+    private LayoutInflater inflater;
+    public static OnResourcesClick onResourcesClick;
+    private int checkedPosition = -1;
+    public static final int TYPE_ITEM_ONE = 1;
+    public static final int TYPE_ITEM_TWO = 2;
+
+    public static interface OnItemClickListener {
+        void onItemClick(CommonDateBean bean, int position, int type);
+    }
+
+    public void setOnItemClickListener(OnItemClickListener listener) {
+        this.mOnItemClickListener = listener;
+    }
+
+    public RecycleviewRightAdapter(Context context, List<CommonDateBean> datas) {
+        this.mContext = context;
+        this.mDatas = datas;
+        inflater = LayoutInflater.from(mContext);
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+
+        return mDatas.get(position).getType();
+    }
+
+    public void refush(List<CommonDateBean> datas) {
+        this.mDatas = datas;
+        notifyDataSetChanged();
+    }
+
+    /**
+     * 设置列表的点击事件回调接口
+     */
+    public static void setOnResourcesClick(OnResourcesClick onResourcesClick) {
+        RecycleviewRightAdapter.onResourcesClick = onResourcesClick;
+    }
+
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        switch (viewType) {
+            case TYPE_ITEM_ONE:
+                return new MyViewHolder(inflater.inflate(R.layout.item_classify_right_ziyuan, parent, false));
+            case TYPE_ITEM_TWO:
+                return new MyViewHolder2(inflater.inflate(R.layout.item_classify_right_ziyuan2, parent, false));
+        }
+        return null;
+    }
+
+    @Override
+    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, @SuppressLint("RecyclerView") int position) {
+        if (holder instanceof MyViewHolder) {
+
+            MyViewHolder myViewHolder = ((MyViewHolder) holder);
+            myViewHolder.txt_tit.setText(mDatas.get(position).getName());
+            if (position == checkedPosition) {
+                ((MyViewHolder) holder).iv_checkbox.setVisibility(View.VISIBLE);
+            } else {
+                ((MyViewHolder) holder).iv_checkbox.setVisibility(View.GONE);
+            }
+            myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    mOnItemClickListener.onItemClick(mDatas.get(position), position, TYPE_ITEM_ONE);
+
+                }
+            });
+
+        } else {
+            MyViewHolder2 myViewHolder2 = ((MyViewHolder2) holder);
+            myViewHolder2.txt_tit.setText(mDatas.get(position).getName());
+            myViewHolder2.tv_distance.setText("距 离:" + mDatas.get(position).getDistance() + "km");
+            myViewHolder2.itemView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    mOnItemClickListener.onItemClick(mDatas.get(position), position, TYPE_ITEM_TWO);
+
+                }
+            });
+        }
+
+    }
+
+
+    @Override
+    public int getItemCount() {
+        return mDatas.size();
+    }
+
+
+    //得到当前选中的位置
+    public int getCheckedPosition() {
+        return checkedPosition;
+    }
+
+    public void clear() {
+        // map.clear();
+        checkedPosition = -1;
+    }
+
+    public void setCheckedPosition(int position) {
+        checkedPosition = position;
+        notifyDataSetChanged(); // 通知适配器数据已改变,需要重新绑定视图
+    }
+
+
+    static class MyViewHolder extends RecyclerView.ViewHolder {
+
+        TextView txt_tit;
+        ImageView iv_checkbox;
+        LinearLayout itemView;
+
+        public MyViewHolder(View view) {
+            super(view);
+            txt_tit = (TextView) view.findViewById(R.id.text);//标题
+            iv_checkbox = (ImageView) view.findViewById(R.id.iv_checkbox);//图标
+            itemView = (LinearLayout) view.findViewById(R.id.item_layout);
+
+        }
+    }
+
+    static class MyViewHolder2 extends RecyclerView.ViewHolder {
+
+        TextView txt_tit;
+        TextView tv_distance;
+        ImageView iv_next;
+        RelativeLayout itemView;
+
+        public MyViewHolder2(View view) {
+            super(view);
+            txt_tit = (TextView) view.findViewById(R.id.text);//标题
+            tv_distance = (TextView) view.findViewById(R.id.tv_distance);//距离
+            iv_next = (ImageView) view.findViewById(R.id.iv_next);//图标
+            itemView = (RelativeLayout) view.findViewById(R.id.item_layout);
+
+        }
+    }
+}

+ 79 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/CommonDateBean.java

@@ -0,0 +1,79 @@
+package com.sjkj.appthreefloor_tsgz.bean;
+
+import java.io.Serializable;
+
+public class CommonDateBean implements Serializable {
+
+
+    private String name;
+    private int type;
+    private String id;
+    private boolean isSelected;
+    private String longitude;
+    private String latitude;
+
+    public String getLongitude() {
+        return longitude;
+    }
+
+    public void setLongitude(String longitude) {
+        this.longitude = longitude;
+    }
+
+    public String getLatitude() {
+        return latitude;
+    }
+
+    public void setLatitude(String latitude) {
+        this.latitude = latitude;
+    }
+
+    public String getDistance() {
+        return distance;
+    }
+
+    public void setDistance(String distance) {
+        this.distance = distance;
+    }
+
+    private String distance;
+
+    public boolean isSelected() {
+        return isSelected;
+    }
+
+    public void setSelected(boolean selected) {
+        isSelected = selected;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+
+
+
+
+
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int getType() {
+        return type;
+    }
+
+    public void setType(int type) {
+        this.type = type;
+    }
+
+}

+ 29 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/bean/ResourcesListBean.java

@@ -0,0 +1,29 @@
+package com.sjkj.appthreefloor_tsgz.bean;
+
+public class ResourcesListBean {
+    private String name;
+    private String value;
+
+    public ResourcesListBean(String name, String value) {
+        this.name = name;
+        this.value = value;
+
+    }
+
+    public String getName() {
+        return name;
+    }
+
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 78 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventDetailsFragment.java

@@ -0,0 +1,78 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.adapter.EventCenterAdapter;
+import com.sjkj.appthreefloor_tsgz.app.App;
+import com.sjkj.appthreefloor_tsgz.bean.NoticeListBean;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentEventDetailsBinding;
+import com.sjkj.appthreefloor_tsgz.fragment.viewModel.EventFargmentViewModel;
+import com.sjkj.appthreefloor_tsgz.net.EventDetailsRequest;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.net.domain.interactor.ProcessErrorSubscriber;
+import com.sjkj.base_lib.view.BaseFragment;
+
+import java.util.List;
+
+public class EventDetailsFragment extends BaseFragment {
+    private FragmentEventDetailsBinding binding;
+    private EventFargmentViewModel viewModel;
+    private EventCenterAdapter adapter;
+    EventDetailsRequest eventDetailsRequest = new EventDetailsRequest(App.getInstance());
+
+    @Override
+    protected int initLayout() {
+        return R.layout.fragment_event_details;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        binding = (FragmentEventDetailsBinding) getViewDataBing(inflater, container);
+        viewModel = new ViewModelProvider(getActivity(), new ViewModelProvider.NewInstanceFactory()).get(EventFargmentViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+        return binding.getRoot();
+    }
+
+    @Override
+    public void initView() {
+        LinearLayoutManager manager = new LinearLayoutManager(getActivity());
+        manager.setOrientation(RecyclerView.VERTICAL);
+        binding.recyclerView.setLayoutManager(manager);
+        viewModel.eventId.set(getActivity().getIntent().getStringExtra("id"));
+
+
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void loadData() {
+        Params params = new Params();
+        params.put("id", viewModel.eventId.get());
+
+        eventDetailsRequest.setParams(params);
+        eventDetailsRequest.execute(new ProcessErrorSubscriber<List<NoticeListBean>>() {
+            @Override
+            public void onError(Throwable e) {
+                super.onError(e);
+            }
+
+            @Override
+            public void onNext(List<NoticeListBean> list) {
+                super.onNext(list);
+            }
+        });
+    }
+}

+ 5 - 5
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventFragment.java

@@ -1,6 +1,7 @@
 package com.sjkj.appthreefloor_tsgz.fragment;
 
 import android.content.Context;
+import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import android.text.Editable;
@@ -36,6 +37,7 @@ import com.scwang.smartrefresh.layout.footer.ClassicsFooter;
 import com.scwang.smartrefresh.layout.listener.OnLoadMoreListener;
 import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
 import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.activity.EventDetailsActivity;
 import com.sjkj.appthreefloor_tsgz.adapter.EventCenterAdapter;
 import com.sjkj.appthreefloor_tsgz.app.App;
 import com.sjkj.appthreefloor_tsgz.bean.EventBean;
@@ -114,11 +116,9 @@ public class EventFragment extends BaseFragment /*implements View.OnClickListene
         adapter.setItemClick(new BaseRecAdapter.OnItemClick<EventBean>() {
             @Override
             public void onItemClick(EventBean bean, int position) {
-//                Intent intent = new Intent(getActivity(), EventDetailsActivity.class);
-//                intent.putExtra("eventCode", bean.getEventCode());
-//                intent.putExtra("id", bean.getId());
-//                intent.putExtra("str", "1");
-//                startActivityForResult(intent, 1000);
+                Intent intent = new Intent(getActivity(), EventDetailsActivity.class);
+                intent.putExtra("id", bean.getId());
+                startActivityForResult(intent, 1000);
             }
         });
         binding.recyclerView.setAdapter(adapter);

+ 47 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventMessageFragment.java

@@ -0,0 +1,47 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.lifecycle.ViewModelProvider;
+
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentEventDetailsBinding;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentEventMessageBinding;
+import com.sjkj.appthreefloor_tsgz.fragment.viewModel.EventFargmentViewModel;
+import com.sjkj.base_lib.view.BaseFragment;
+
+public class EventMessageFragment extends BaseFragment {
+    private FragmentEventMessageBinding binding;
+    private EventFargmentViewModel viewModel;
+    @Override
+    protected int initLayout() {
+           return R.layout.fragment_event_message;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        binding = (FragmentEventMessageBinding) getViewDataBing(inflater, container);
+        viewModel = new ViewModelProvider(getActivity(), new ViewModelProvider.NewInstanceFactory()).get(EventFargmentViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+        return binding.getRoot();
+    }
+
+    @Override
+    public void initView() {
+
+    }
+
+    @Override
+    public void initListener() {
+
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+}

+ 289 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/EventNearByFragment.java

@@ -0,0 +1,289 @@
+package com.sjkj.appthreefloor_tsgz.fragment;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+
+import com.amap.api.maps.CameraUpdate;
+import com.amap.api.maps.CameraUpdateFactory;
+import com.amap.api.maps.model.CameraPosition;
+import com.amap.api.maps.model.LatLng;
+import com.hjq.permissions.OnPermissionCallback;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+import com.sjkj.appthreefloor_tsgz.R;
+import com.sjkj.appthreefloor_tsgz.adapter.RecycleviewLeftAdapter;
+import com.sjkj.appthreefloor_tsgz.adapter.RecycleviewRightAdapter;
+import com.sjkj.appthreefloor_tsgz.bean.CommonDateBean;
+import com.sjkj.appthreefloor_tsgz.bean.ResourcesListBean;
+import com.sjkj.appthreefloor_tsgz.databinding.FragmentEventNearbyBinding;
+import com.sjkj.appthreefloor_tsgz.fragment.viewModel.EventFargmentViewModel;
+import com.sjkj.appthreefloor_tsgz.utils.JsonUtil;
+import com.sjkj.base_lib.app.AppManager;
+import com.sjkj.base_lib.utils.Constants;
+import com.sjkj.base_lib.utils.ToastUtils;
+import com.sjkj.base_lib.view.BaseFragment;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EventNearByFragment extends BaseFragment {
+    private FragmentEventNearbyBinding binding;
+    private EventFargmentViewModel viewModel;
+
+    private RecycleviewLeftAdapter leftAdapter;
+    private RecycleviewRightAdapter rightAdapter;
+    private List<ResourcesListBean> resourceSelectTextList = new ArrayList<>();
+    private List<CommonDateBean> resourceSelectList = new ArrayList<>();
+    ResourcesListBean resourcesListBean;
+    CommonDateBean commonDateBean;
+    private List<String> distance = new ArrayList<>();
+
+    @Override
+    protected int initLayout() {
+        return R.layout.fragment_event_nearby;
+    }
+
+    @Override
+    public View initBinding(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
+        binding = (FragmentEventNearbyBinding) getViewDataBing(inflater, container);
+        viewModel = new ViewModelProvider(getActivity(), new ViewModelProvider.NewInstanceFactory()).get(EventFargmentViewModel.class);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner(this);
+        binding.setViewModel(viewModel);
+        binding.setLifecycleOwner((LifecycleOwner) this);
+        binding.mapView.onCreate(bundle);
+        binding.mapView.getMap().getUiSettings().setLogoBottomMargin(-50);
+        binding.mapView.getMap().getUiSettings().setZoomControlsEnabled(true);
+        binding.mapView.getMap().getUiSettings().setMyLocationButtonEnabled(false);
+        //binding.mapView.getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(43.911535, 125.324667), zoomValue));
+        changeCamera(CameraUpdateFactory.newCameraPosition(new CameraPosition(new LatLng(Constants.DEFAULT_LOCATION_LAT, Constants.DEFAULT_LOCATION_LNG, true), 10, 30, 30)));
+        return binding.getRoot();
+    }
+
+    /**
+     * 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区域
+     */
+    private void changeCamera(CameraUpdate update) {
+
+        binding.mapView.getMap().moveCamera(update);
+
+    }
+
+    private void requestPermissionsLocation() {
+        XXPermissions.with(AppManager.getAppManager().currentActivity())
+                .permission(Permission.ACCESS_COARSE_LOCATION)
+                .permission(Permission.ACCESS_FINE_LOCATION)
+//                .permission(Permission.ACCESS_BACKGROUND_LOCATION)
+                .request(new OnPermissionCallback() {
+                    @Override
+                    public void onGranted(List<String> permissions, boolean all) {
+                        if (all) {
+                            //开始定位
+                            initLocation();
+                        } else {
+                            ToastUtils.show("获取部分权限成功,但部分权限未正常授予");
+                        }
+                    }
+
+                    @Override
+                    public void onDenied(List<String> permissions, boolean never) {
+                        if (never) {
+                            ToastUtils.show("被永久拒绝授权,请手动授予权限");
+                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
+                            XXPermissions.startPermissionActivity(AppManager.getAppManager().currentActivity(), permissions);
+                        } else {
+                            ToastUtils.show("获取权限失败");
+                        }
+                    }
+                });
+    }
+
+    private void initLocation() {
+
+
+    }
+
+    @Override
+    public void initView() {
+        requestPermissionsLocation();
+        distance.add("5km");
+        distance.add("10km");
+        distance.add("15km");
+        distance.add("20km");
+        distance.add("25km");
+        distance.add("30km");
+        distance.add("35km");
+        distance.add("40km");
+        distance.add("45km");
+        distance.add("50km");
+        //多加一条
+        resourceSelectTextList.add(new ResourcesListBean("范围选择", "zidingyi"));
+        JSONArray jsonArray = new JSONArray();
+        String jsonString = JsonUtil.loadJSONFromAsset(getActivity(), "json_list.json");
+        try {
+            JSONObject jsonObject = new JSONObject(jsonString);
+            jsonArray = jsonObject.getJSONArray("data");
+            // 从这里你可以访问你的JSON数据,例如:jsonObject.getString("key");
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        for (int i = 0; i < jsonArray.length(); i++) {
+
+            try {
+                JSONObject obj = jsonArray.getJSONObject(i);
+                resourcesListBean = new ResourcesListBean(obj.getString("name"), obj.getString("value"));
+                resourceSelectTextList.add(resourcesListBean);
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+
+//        //资源列表
+
+        JSONArray jsonArray2 = new JSONArray();
+        String jsonString2 = JsonUtil.loadJSONFromAsset(getActivity(), "json_list2.json");
+        try {
+            JSONObject jsonObject2 = new JSONObject(jsonString2);
+            jsonArray2 = jsonObject2.getJSONArray("data");
+        } catch (JSONException e) {
+            e.printStackTrace();
+        }
+        for (int i = 0; i < jsonArray2.length(); i++) {
+
+            try {
+                JSONObject obj = jsonArray2.getJSONObject(i);
+                commonDateBean = new CommonDateBean();
+                commonDateBean.setDistance(obj.getString("distance"));
+                commonDateBean.setId(obj.getString("id"));
+                commonDateBean.setLatitude(obj.getString("latitude"));
+                commonDateBean.setLongitude(obj.getString("longitude"));
+                commonDateBean.setName(obj.getString("name"));
+                commonDateBean.setType(2);
+                resourceSelectList.add(commonDateBean);
+            } catch (JSONException e) {
+                e.printStackTrace();
+            }
+        }
+
+        //左边recyclerview
+        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
+        binding.recyclerViewLeft.setLayoutManager(linearLayoutManager);
+        leftAdapter = new RecycleviewLeftAdapter(getActivity(), resourceSelectTextList);
+        binding.recyclerViewLeft.setAdapter(leftAdapter);
+        //左边的RecyclerView被选中时改变背景颜色
+        leftAdapter.setSelectedPosition(0);
+        //右边recyclerview
+        binding.recyclerViewRight.smoothScrollToPosition(0);
+        LinearLayoutManager layoutManagerRight = new LinearLayoutManager(getActivity());
+        binding.recyclerViewRight.setLayoutManager(layoutManagerRight);
+        List<CommonDateBean> list = new ArrayList<>();
+        for (int i = 0; i < distance.size(); i++) {
+            commonDateBean = new CommonDateBean();
+            commonDateBean.setType(1);
+            commonDateBean.setName(distance.get(i));
+            list.add(commonDateBean);
+
+        }
+        rightAdapter = new RecycleviewRightAdapter(getActivity(), list);
+        binding.recyclerViewRight.setAdapter(rightAdapter);
+        rightAdapter.setCheckedPosition(0);
+        rightAdapter.setOnItemClickListener(new RecycleviewRightAdapter.OnItemClickListener() {
+            @Override
+            public void onItemClick(CommonDateBean bean, int position, int type) {
+                if (type == rightAdapter.TYPE_ITEM_ONE) {
+                    rightAdapter.setCheckedPosition(position);
+                } else {
+                    Log.d("zhr1111", bean.getName());
+                }
+
+            }
+        });
+
+        leftAdapter.setOnItemClickListener(new RecycleviewLeftAdapter.OnItemClickListener() {
+            @Override
+            public void onItemClick(View view, int position) {
+                //右边RecyclerView相对应置顶
+                binding.recyclerViewRight.smoothScrollToPosition(0);
+                //左边的RecyclerView被选中时改变背景颜色
+                leftAdapter.setSelectedPosition(position);
+                //刷新左边被选中的item,否则背景颜色不改变无效(亲自踩坑)
+                leftAdapter.notifyDataSetChanged();
+                LoadZiYuanData(resourceSelectTextList.get(position));
+            }
+        });
+
+
+    }
+
+    private void LoadZiYuanData(ResourcesListBean resourcesListBean) {
+        if (resourcesListBean.getValue().equals("zidingyi")) {
+            List<CommonDateBean> list = new ArrayList<>();
+            for (int i = 0; i < distance.size(); i++) {
+                commonDateBean = new CommonDateBean();
+                commonDateBean.setType(1);
+                commonDateBean.setName(distance.get(i));
+                list.add(commonDateBean);
+
+            }
+            rightAdapter.refush(list);
+        } else {
+            rightAdapter.refush(resourceSelectList);
+        }
+
+        rightAdapter.notifyDataSetChanged();
+    }
+
+    @Override
+    public void initListener() {
+
+
+    }
+
+    @Override
+    public void loadData() {
+
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        binding.mapView.onResume();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        binding.mapView.onPause();
+    }
+
+    @Override
+    public void onSaveInstanceState(@NonNull Bundle outState) {
+        super.onSaveInstanceState(outState);
+        binding.mapView.onSaveInstanceState(outState);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        binding.mapView.onDestroy();
+    }
+
+}

+ 0 - 1
app/src/main/java/com/sjkj/appthreefloor_tsgz/fragment/MainFragment.java

@@ -97,7 +97,6 @@ public class MainFragment extends BaseFragment {
 
                         if (CommonUtils.checkLongitudeLatitude(lng + "", lat + "")) {
                             // hideLoadingDialog(LoadingDialog.LOADING_SUCCESS);
-                            Log.d("zhr1111", lat + "===" + lng);
                             startActivity(new Intent(getActivity(), WaterCraneResourcesActivity.class).putExtra("Longitude", lng).putExtra("Latitude", lat));
                         } else {
                             ToastUtils.show("定位失败,请检查定位权限或者稍后重试");

+ 53 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/net/EventDetailsRequest.java

@@ -0,0 +1,53 @@
+package com.sjkj.appthreefloor_tsgz.net;
+
+import android.content.Context;
+
+import com.sjkj.appthreefloor_tsgz.bean.NoticeListBean;
+import com.sjkj.base_lib.entity.Params;
+import com.sjkj.base_lib.entity.ResponseBean;
+import com.sjkj.base_lib.net.RetrofitFactory;
+import com.sjkj.base_lib.net.data.exception.BusinessException;
+import com.sjkj.base_lib.net.domain.interactor.UseCase;
+import com.sjkj.base_lib.utils.AppTools;
+
+import java.util.List;
+
+import rx.Observable;
+import rx.functions.Func1;
+
+/**
+ * 事件详情
+ */
+public class EventDetailsRequest extends UseCase {
+    private Context context;
+    private RetrofitService service;
+
+    private Params params;
+
+    public Params getParams() {
+        return params;
+    }
+
+    public void setParams(Params params) {
+        this.params = params;
+    }
+
+    public EventDetailsRequest(Context context) {
+        this.context = context;
+        service = RetrofitFactory.getRetrofit(AppTools.getBaseUrl()).create(RetrofitService.class);
+    }
+
+    @Override
+    protected Observable buildUseCaseObservable() {
+        return service.eventDetails(params).flatMap(new Func1<ResponseBean<List<NoticeListBean>>, Observable<List<NoticeListBean>>>() {
+            @Override
+            public Observable<List<NoticeListBean>> call(ResponseBean<List<NoticeListBean>> responseBean) {
+                if (!ResponseBean.CODE_SUCCESS.
+                        equals(responseBean.getCode())) {
+                    return Observable.error(new BusinessException(responseBean.getMsg()));
+                }
+                return Observable.just(responseBean.getData());
+            }
+        });
+    }
+}

+ 4 - 2
app/src/main/java/com/sjkj/appthreefloor_tsgz/net/RetrofitService.java

@@ -7,14 +7,12 @@ import com.sjkj.appthreefloor_tsgz.bean.DailyBean;
 import com.sjkj.appthreefloor_tsgz.bean.EventCenterListBean;
 import com.sjkj.appthreefloor_tsgz.bean.FileBean;
 import com.sjkj.appthreefloor_tsgz.bean.LogInRsaBean;
-import com.sjkj.appthreefloor_tsgz.bean.LoginBean;
 import com.sjkj.appthreefloor_tsgz.bean.NoticeListBean;
 import com.sjkj.appthreefloor_tsgz.bean.ResourceVisualizationBean;
 import com.sjkj.appthreefloor_tsgz.bean.VersionBean;
 import com.sjkj.base_lib.camera.dh.bean.CameraBean;
 import com.sjkj.base_lib.entity.Params;
 import com.sjkj.base_lib.entity.ResponseBean;
-import com.sjkj.base_lib.entity.ResponseListBean;
 
 import java.util.List;
 import java.util.Map;
@@ -32,6 +30,10 @@ public interface RetrofitService {
     @POST("app/login")
     Observable<ResponseBean<Object>> login(@Body Params params);
 
+    //事件详情
+    @GET("event/getEventById")
+    Observable<ResponseBean<List<NoticeListBean>>> eventDetails(@QueryMap Params params);
+
     //首页-通知公告
     @GET("app/noticeList")
     Observable<ResponseBean<List<NoticeListBean>>> homeNoticeList(@QueryMap Params params);

+ 874 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/GaoDeBottomSheetBehavior.java

@@ -0,0 +1,874 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package com.sjkj.appthreefloor_tsgz.utils;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.Build.VERSION;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.view.ViewParent;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RestrictTo;
+import androidx.annotation.RestrictTo.Scope;
+import androidx.annotation.VisibleForTesting;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+import androidx.coordinatorlayout.widget.CoordinatorLayout.Behavior;
+import androidx.core.math.MathUtils;
+import androidx.core.view.ViewCompat;
+import androidx.customview.view.AbsSavedState;
+import androidx.customview.widget.ViewDragHelper;
+import androidx.customview.widget.ViewDragHelper.Callback;
+
+import com.sjkj.appthreefloor_tsgz.R;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 高德首页滑动效果
+ *
+ * @author yixiaolunhui
+ */
+public class GaoDeBottomSheetBehavior<V extends View> extends Behavior<V> {
+    public static final int STATE_DRAGGING = 1;
+    public static final int STATE_SETTLING = 2;
+    public static final int STATE_EXPANDED = 3;
+    public static final int STATE_COLLAPSED = 4;
+    public static final int STATE_HIDDEN = 5;
+    public static final int STATE_HALF_EXPANDED = 6;
+    public static final int PEEK_HEIGHT_AUTO = -1;
+    private static final float HIDE_THRESHOLD = 0.5F;
+    private static final float HIDE_FRICTION = 0.1F;
+    public static final int MIDDLE_HEIGHT_AUTO = -1;
+    private boolean fitToContents = true;
+    private float maximumVelocity;
+    private int peekHeight;
+    private boolean peekHeightAuto;
+    private int peekHeightMin;
+    private int lastPeekHeight;
+    int fitToContentsOffset;
+    int halfExpandedOffset;
+    int collapsedOffset;
+    boolean hideable;
+    private boolean skipCollapsed;
+    int state = STATE_COLLAPSED;
+    ViewDragHelper viewDragHelper;
+    private boolean ignoreEvents;
+    private int lastNestedScrollDy;
+    private boolean nestedScrolled;
+    int parentHeight;
+    WeakReference<V> viewRef;
+    WeakReference<View> nestedScrollingChildRef;
+    private BottomSheetCallback callback;
+    private VelocityTracker velocityTracker;
+    int activePointerId;
+    private int initialY;
+    boolean touchingScrollingChild;
+    private Map<View, Integer> importantForAccessibilityMap;
+    private final Callback dragCallback;
+
+
+    private int mMiddleHeight;
+    private boolean mMiddleHeightAuto;
+
+    public GaoDeBottomSheetBehavior() {
+        this.dragCallback = new NamelessClass_1();
+    }
+
+    public GaoDeBottomSheetBehavior(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        this.dragCallback = new NamelessClass_1();
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BottomSheetBehavior_Layout);
+        TypedValue value = a.peekValue(R.styleable.BottomSheetBehavior_Layout_behavior_peekHeight);
+        if (value != null && value.data == -1) {
+            this.setPeekHeight(value.data);
+        } else {
+            this.setPeekHeight(a.getDimensionPixelSize(R.styleable.BottomSheetBehavior_Layout_behavior_peekHeight, -1));
+        }
+
+        this.setHideable(a.getBoolean(R.styleable.BottomSheetBehavior_Layout_behavior_hideAble, false));
+        this.setFitToContents(a.getBoolean(R.styleable.BottomSheetBehavior_Layout_behavior_fitToContents, true));
+        this.setSkipCollapsed(a.getBoolean(R.styleable.BottomSheetBehavior_Layout_behavior_skipCollapse, false));
+        setMiddleHeight(a.getDimensionPixelSize(R.styleable.BottomSheetBehavior_Layout_behavior_middleHeight, MIDDLE_HEIGHT_AUTO));
+
+        a.recycle();
+        ViewConfiguration configuration = ViewConfiguration.get(context);
+        this.maximumVelocity = (float) configuration.getScaledMaximumFlingVelocity();
+    }
+
+    class NamelessClass_1 extends Callback {
+        NamelessClass_1() {
+        }
+
+        @Override
+        public boolean tryCaptureView(@NonNull View child, int pointerId) {
+            if (GaoDeBottomSheetBehavior.this.state == STATE_DRAGGING) {
+                return false;
+            } else if (GaoDeBottomSheetBehavior.this.touchingScrollingChild) {
+                return false;
+            } else {
+                if (GaoDeBottomSheetBehavior.this.state == 3 && GaoDeBottomSheetBehavior.this.activePointerId == pointerId) {
+                    View scroll = (View) GaoDeBottomSheetBehavior.this.nestedScrollingChildRef.get();
+                    if (scroll != null && scroll.canScrollVertically(-1)) {
+                        return false;
+                    }
+                }
+
+                return GaoDeBottomSheetBehavior.this.viewRef != null && GaoDeBottomSheetBehavior.this.viewRef.get() == child;
+            }
+        }
+
+        @Override
+        public void onViewPositionChanged(@NonNull View changedView, int left, int top, int dx, int dy) {
+            GaoDeBottomSheetBehavior.this.dispatchOnSlide(top);
+        }
+
+        @Override
+        public void onViewDragStateChanged(int state) {
+            if (state == 1) {
+                GaoDeBottomSheetBehavior.this.setStateInternal(STATE_DRAGGING);
+            }
+
+        }
+
+        @Override
+        public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) {
+            int top;
+            byte targetState;
+            int currentTop;
+            if (yvel < 0.0F) {
+                if (GaoDeBottomSheetBehavior.this.fitToContents) {
+                    currentTop = releasedChild.getTop();
+
+                    if (currentTop < (collapsedOffset + HIDE_THRESHOLD) && currentTop >= halfExpandedOffset) {
+                        top = GaoDeBottomSheetBehavior.this.halfExpandedOffset;
+                        targetState = STATE_HALF_EXPANDED;
+                    } else {
+                        top = GaoDeBottomSheetBehavior.this.fitToContentsOffset;
+                        targetState = STATE_EXPANDED;
+                    }
+
+                } else {
+                    currentTop = releasedChild.getTop();
+                    if (currentTop > GaoDeBottomSheetBehavior.this.halfExpandedOffset) {
+                        top = GaoDeBottomSheetBehavior.this.halfExpandedOffset;
+                        targetState = STATE_HALF_EXPANDED;
+                    } else {
+                        top = 0;
+                        targetState = STATE_EXPANDED;
+                    }
+                }
+            } else if (!GaoDeBottomSheetBehavior.this.hideable || !GaoDeBottomSheetBehavior.this.shouldHide(releasedChild, yvel) || releasedChild.getTop() <= GaoDeBottomSheetBehavior.this.collapsedOffset && Math.abs(xvel) >= Math.abs(yvel)) {
+                if (yvel != 0.0F && Math.abs(xvel) <= Math.abs(yvel)) {
+                    currentTop = releasedChild.getTop();
+                    if (currentTop < halfExpandedOffset) {
+                        top = GaoDeBottomSheetBehavior.this.halfExpandedOffset;
+                        targetState = STATE_HALF_EXPANDED;
+                    } else {
+                        top = GaoDeBottomSheetBehavior.this.collapsedOffset;
+                        targetState = STATE_COLLAPSED;
+                    }
+
+                } else {
+                    currentTop = releasedChild.getTop();
+                    if (GaoDeBottomSheetBehavior.this.fitToContents) {
+                        if (Math.abs(currentTop - GaoDeBottomSheetBehavior.this.fitToContentsOffset) < Math.abs(currentTop - GaoDeBottomSheetBehavior.this.collapsedOffset)) {
+                            top = GaoDeBottomSheetBehavior.this.fitToContentsOffset;
+                            targetState = STATE_EXPANDED;
+                        } else {
+                            top = GaoDeBottomSheetBehavior.this.collapsedOffset;
+                            targetState = STATE_COLLAPSED;
+                        }
+                    } else if (currentTop < GaoDeBottomSheetBehavior.this.halfExpandedOffset) {
+                        if (currentTop < Math.abs(currentTop - GaoDeBottomSheetBehavior.this.collapsedOffset)) {
+                            top = 0;
+                            targetState = STATE_EXPANDED;
+                        } else {
+                            top = GaoDeBottomSheetBehavior.this.halfExpandedOffset;
+                            targetState = STATE_HALF_EXPANDED;
+                        }
+                    } else if (Math.abs(currentTop - GaoDeBottomSheetBehavior.this.halfExpandedOffset) < Math.abs(currentTop - GaoDeBottomSheetBehavior.this.collapsedOffset)) {
+                        top = GaoDeBottomSheetBehavior.this.halfExpandedOffset;
+                        targetState = STATE_HALF_EXPANDED;
+                    } else {
+                        top = GaoDeBottomSheetBehavior.this.collapsedOffset;
+                        targetState = STATE_COLLAPSED;
+                    }
+                }
+            } else {
+                top = GaoDeBottomSheetBehavior.this.parentHeight;
+                targetState = STATE_HIDDEN;
+            }
+
+            if (GaoDeBottomSheetBehavior.this.viewDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top)) {
+                GaoDeBottomSheetBehavior.this.setStateInternal(STATE_SETTLING);
+                ViewCompat.postOnAnimation(releasedChild, GaoDeBottomSheetBehavior.this.new SettleRunnable(releasedChild, targetState));
+            } else {
+                GaoDeBottomSheetBehavior.this.setStateInternal(targetState);
+            }
+
+        }
+
+        @Override
+        public int clampViewPositionVertical(@NonNull View child, int top, int dy) {
+            return MathUtils.clamp(top, GaoDeBottomSheetBehavior.this.getExpandedOffset(), GaoDeBottomSheetBehavior.this.hideable ? GaoDeBottomSheetBehavior.this.parentHeight : GaoDeBottomSheetBehavior.this.collapsedOffset);
+        }
+
+        @Override
+        public int clampViewPositionHorizontal(@NonNull View child, int left, int dx) {
+            return child.getLeft();
+        }
+
+        @Override
+        public int getViewVerticalDragRange(@NonNull View child) {
+            return GaoDeBottomSheetBehavior.this.hideable ? GaoDeBottomSheetBehavior.this.parentHeight : GaoDeBottomSheetBehavior.this.collapsedOffset;
+        }
+    }
+
+    @Override
+    public Parcelable onSaveInstanceState(CoordinatorLayout parent, V child) {
+        return new SavedState(super.onSaveInstanceState(parent, child), this.state);
+    }
+
+    @Override
+    public void onRestoreInstanceState(CoordinatorLayout parent, V child, Parcelable state) {
+        SavedState ss = (SavedState) state;
+        super.onRestoreInstanceState(parent, child, ss.getSuperState());
+        if (ss.state != STATE_DRAGGING && ss.state != STATE_SETTLING) {
+            this.state = ss.state;
+        } else {
+            this.state = STATE_COLLAPSED;
+        }
+
+    }
+
+    @Override
+    public boolean onLayoutChild(CoordinatorLayout parent, V child, int layoutDirection) {
+        if (ViewCompat.getFitsSystemWindows(parent) && !ViewCompat.getFitsSystemWindows(child)) {
+            child.setFitsSystemWindows(true);
+        }
+
+        int savedTop = child.getTop();
+        parent.onLayoutChild(child, layoutDirection);
+        this.parentHeight = parent.getHeight();
+        if (this.peekHeightAuto) {
+            if (this.peekHeightMin == 0) {
+                this.peekHeightMin = parent.getResources().getDimensionPixelSize(R.dimen.design_bottom_sheet_peek_height_min);
+            }
+
+            this.lastPeekHeight = Math.max(this.peekHeightMin, this.parentHeight - parent.getWidth() * 9 / 16);
+        } else {
+            this.lastPeekHeight = this.peekHeight;
+        }
+        if (mMiddleHeightAuto) {
+            mMiddleHeight = this.parentHeight;
+        }
+        this.fitToContentsOffset = Math.max(0, this.parentHeight - child.getHeight());
+        this.halfExpandedOffset = this.parentHeight - mMiddleHeight;
+        this.calculateCollapsedOffset();
+        if (this.state == STATE_EXPANDED) {
+            ViewCompat.offsetTopAndBottom(child, this.getExpandedOffset());
+        } else if (this.state == STATE_HALF_EXPANDED) {
+            ViewCompat.offsetTopAndBottom(child, this.halfExpandedOffset);
+        } else if (this.hideable && this.state == STATE_HIDDEN) {
+            ViewCompat.offsetTopAndBottom(child, this.parentHeight);
+        } else if (this.state == STATE_COLLAPSED) {
+            ViewCompat.offsetTopAndBottom(child, this.collapsedOffset);
+        } else if (this.state == STATE_DRAGGING || this.state == STATE_SETTLING) {
+            ViewCompat.offsetTopAndBottom(child, savedTop - child.getTop());
+        }
+
+        if (this.viewDragHelper == null) {
+            this.viewDragHelper = ViewDragHelper.create(parent, this.dragCallback);
+        }
+
+        this.viewRef = new WeakReference(child);
+        this.nestedScrollingChildRef = new WeakReference(this.findScrollingChild(child));
+        return true;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
+        if (!child.isShown()) {
+            this.ignoreEvents = true;
+            return false;
+        } else {
+            int action = event.getActionMasked();
+            if (action == 0) {
+                this.reset();
+            }
+
+            if (this.velocityTracker == null) {
+                this.velocityTracker = VelocityTracker.obtain();
+            }
+
+            this.velocityTracker.addMovement(event);
+            switch (action) {
+                case 0:
+                    int initialX = (int) event.getX();
+                    this.initialY = (int) event.getY();
+                    View scroll = this.nestedScrollingChildRef != null ? (View) this.nestedScrollingChildRef.get() : null;
+                    if (scroll != null && parent.isPointInChildBounds(scroll, initialX, this.initialY)) {
+                        this.activePointerId = event.getPointerId(event.getActionIndex());
+                        this.touchingScrollingChild = true;
+                    }
+
+                    this.ignoreEvents = this.activePointerId == -1 && !parent.isPointInChildBounds(child, initialX, this.initialY);
+                    break;
+                case 1:
+                case 3:
+                    this.touchingScrollingChild = false;
+                    this.activePointerId = -1;
+                    if (this.ignoreEvents) {
+                        this.ignoreEvents = false;
+                        return false;
+                    }
+                case 2:
+            }
+
+            if (!this.ignoreEvents && this.viewDragHelper != null && this.viewDragHelper.shouldInterceptTouchEvent(event)) {
+                return true;
+            } else {
+                View scroll = this.nestedScrollingChildRef != null ? (View) this.nestedScrollingChildRef.get() : null;
+                return action == 2 && scroll != null && !this.ignoreEvents && this.state != 1 && !parent.isPointInChildBounds(scroll, (int) event.getX(), (int) event.getY()) && this.viewDragHelper != null && Math.abs((float) this.initialY - event.getY()) > (float) this.viewDragHelper.getTouchSlop();
+            }
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
+        if (!child.isShown()) {
+            return false;
+        } else {
+            int action = event.getActionMasked();
+            if (this.state == STATE_DRAGGING && action == 0) {
+                return true;
+            } else {
+                if (this.viewDragHelper != null) {
+                    this.viewDragHelper.processTouchEvent(event);
+                }
+
+                if (action == 0) {
+                    this.reset();
+                }
+
+                if (this.velocityTracker == null) {
+                    this.velocityTracker = VelocityTracker.obtain();
+                }
+
+                this.velocityTracker.addMovement(event);
+                if (action == 2 && !this.ignoreEvents && Math.abs((float) this.initialY - event.getY()) > (float) this.viewDragHelper.getTouchSlop()) {
+                    this.viewDragHelper.captureChildView(child, event.getPointerId(event.getActionIndex()));
+                }
+
+                return !this.ignoreEvents;
+            }
+        }
+    }
+
+    @Override
+    public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull V child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
+        this.lastNestedScrollDy = 0;
+        this.nestedScrolled = false;
+        return (axes & 2) != 0;
+    }
+
+    @Override
+    public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull V child, @NonNull View target, int dx, int dy, @NonNull int[] consumed, int type) {
+        if (type != 1) {
+            View scrollingChild = (View) this.nestedScrollingChildRef.get();
+            if (target == scrollingChild) {
+                int currentTop = child.getTop();
+                int newTop = currentTop - dy;
+                if (dy > 0) {
+                    if (newTop < this.getExpandedOffset()) {
+                        consumed[1] = currentTop - this.getExpandedOffset();
+                        ViewCompat.offsetTopAndBottom(child, -consumed[1]);
+                        this.setStateInternal(STATE_EXPANDED);
+                    } else {
+                        consumed[1] = dy;
+                        ViewCompat.offsetTopAndBottom(child, -dy);
+                        this.setStateInternal(STATE_DRAGGING);
+                    }
+                } else if (dy < 0 && !target.canScrollVertically(-1)) {
+                    if (newTop > this.collapsedOffset && !this.hideable) {
+                        consumed[1] = currentTop - this.collapsedOffset;
+                        ViewCompat.offsetTopAndBottom(child, -consumed[1]);
+                        this.setStateInternal(STATE_COLLAPSED);
+                    } else {
+                        consumed[1] = dy;
+                        ViewCompat.offsetTopAndBottom(child, -dy);
+                        this.setStateInternal(STATE_DRAGGING);
+                    }
+                }
+
+                this.dispatchOnSlide(child.getTop());
+                this.lastNestedScrollDy = dy;
+                this.nestedScrolled = true;
+            }
+        }
+    }
+
+    @Override
+    public void onStopNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull V child, @NonNull View target, int type) {
+        if (child.getTop() == this.getExpandedOffset()) {
+            this.setStateInternal(STATE_EXPANDED);
+        } else if (target == this.nestedScrollingChildRef.get() && this.nestedScrolled) {
+            int top;
+            byte targetState;
+            if (this.lastNestedScrollDy > 0) {
+                int currentTop = child.getTop();
+                if (currentTop <= collapsedOffset - HIDE_THRESHOLD && currentTop >= halfExpandedOffset) {
+                    top = this.halfExpandedOffset;
+                    targetState = STATE_HALF_EXPANDED;
+
+                } else {
+                    top = this.getExpandedOffset();
+                    targetState = STATE_EXPANDED;
+                }
+
+            } else if (this.hideable && this.shouldHide(child, this.getYVelocity())) {
+                top = this.parentHeight;
+                targetState = STATE_HIDDEN;
+            } else if (this.lastNestedScrollDy == 0) {
+                int currentTop = child.getTop();
+                if (this.fitToContents) {
+                    if (Math.abs(currentTop - this.fitToContentsOffset) < Math.abs(currentTop - this.collapsedOffset)) {
+                        top = this.fitToContentsOffset;
+                        targetState = STATE_EXPANDED;
+                    } else {
+                        top = this.collapsedOffset;
+                        targetState = STATE_COLLAPSED;
+                    }
+                } else if (currentTop < this.halfExpandedOffset) {
+                    if (currentTop < Math.abs(currentTop - this.collapsedOffset)) {
+                        top = 0;
+                        targetState = STATE_EXPANDED;
+                    } else {
+                        top = this.halfExpandedOffset;
+                        targetState = STATE_HALF_EXPANDED;
+                    }
+                } else if (Math.abs(currentTop - this.halfExpandedOffset) < Math.abs(currentTop - this.collapsedOffset)) {
+                    top = this.halfExpandedOffset;
+                    targetState = STATE_HALF_EXPANDED;
+                } else {
+                    top = this.collapsedOffset;
+                    targetState = STATE_COLLAPSED;
+                }
+            } else {
+                int currentTop = child.getTop();
+                if (currentTop <= halfExpandedOffset + HIDE_THRESHOLD && currentTop > HIDE_THRESHOLD) {
+                    top = this.halfExpandedOffset;
+                    targetState = STATE_HALF_EXPANDED;
+                } else {
+                    top = this.collapsedOffset;
+                    targetState = STATE_COLLAPSED;
+                }
+            }
+
+            if (this.viewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
+                this.setStateInternal(STATE_SETTLING);
+                ViewCompat.postOnAnimation(child, new SettleRunnable(child, targetState));
+            } else {
+                this.setStateInternal(targetState);
+            }
+
+            this.nestedScrolled = false;
+        }
+    }
+
+    @Override
+    public boolean onNestedPreFling(@NonNull CoordinatorLayout coordinatorLayout, @NonNull V child, @NonNull View target, float velocityX, float velocityY) {
+        return target == this.nestedScrollingChildRef.get() && (this.state != STATE_EXPANDED || super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY));
+    }
+
+    public boolean isFitToContents() {
+        return this.fitToContents;
+    }
+
+    public void setFitToContents(boolean fitToContents) {
+        if (this.fitToContents != fitToContents) {
+            this.fitToContents = fitToContents;
+            if (this.viewRef != null) {
+                this.calculateCollapsedOffset();
+            }
+
+            this.setStateInternal(this.fitToContents && this.state == STATE_HALF_EXPANDED ? STATE_HALF_EXPANDED : this.state);
+        }
+    }
+
+    public final void setPeekHeight(int peekHeight) {
+        boolean layout = false;
+        if (peekHeight == -1) {
+            if (!this.peekHeightAuto) {
+                this.peekHeightAuto = true;
+                layout = true;
+            }
+        } else if (this.peekHeightAuto || this.peekHeight != peekHeight) {
+            this.peekHeightAuto = false;
+            this.peekHeight = Math.max(0, peekHeight);
+            this.collapsedOffset = this.parentHeight - peekHeight;
+            layout = true;
+        }
+
+        if (layout && this.state == STATE_COLLAPSED && this.viewRef != null) {
+            V view = (V) this.viewRef.get();
+            if (view != null) {
+                view.requestLayout();
+            }
+        }
+
+    }
+
+    public final void setMiddleHeight(int middleHeight) {
+        boolean layout = false;
+        if (middleHeight == PEEK_HEIGHT_AUTO) {
+            if (!mMiddleHeightAuto) {
+                mMiddleHeightAuto = true;
+                layout = true;
+            }
+        } else if (mMiddleHeightAuto || mMiddleHeight != middleHeight) {
+            mMiddleHeightAuto = false;
+            mMiddleHeight = Math.max(0, middleHeight);
+            layout = true;
+        }
+        if (layout && this.state == STATE_COLLAPSED && viewRef != null) {
+            V view = viewRef.get();
+            if (view != null) {
+                view.requestLayout();
+            }
+        }
+    }
+
+    public final int getPeekHeight() {
+        return this.peekHeightAuto ? -1 : this.peekHeight;
+    }
+
+    public final int getMiddleHeight() {
+        return this.mMiddleHeightAuto ? -1 : this.mMiddleHeight;
+    }
+
+    public final int getParentHeight() {
+        return this.parentHeight;
+    }
+
+    public void setHideable(boolean hideable) {
+        this.hideable = hideable;
+    }
+
+    public boolean isHideable() {
+        return this.hideable;
+    }
+
+    public void setSkipCollapsed(boolean skipCollapsed) {
+        this.skipCollapsed = skipCollapsed;
+    }
+
+    public boolean getSkipCollapsed() {
+        return this.skipCollapsed;
+    }
+
+    public void setBottomSheetCallback(BottomSheetCallback callback) {
+        this.callback = callback;
+    }
+
+    public final void setState(final int state) {
+        if (state != this.state) {
+            if (this.viewRef == null) {
+                if (state == STATE_COLLAPSED || state == STATE_EXPANDED || state == STATE_HALF_EXPANDED || this.hideable && state == STATE_HIDDEN) {
+                    this.state = state;
+                }
+
+            } else {
+                final V child = (V) this.viewRef.get();
+                if (child != null) {
+                    ViewParent parent = child.getParent();
+                    if (parent != null && parent.isLayoutRequested() && ViewCompat.isAttachedToWindow(child)) {
+                        child.post(new Runnable() {
+                            @Override
+                            public void run() {
+                                GaoDeBottomSheetBehavior.this.startSettlingAnimation(child, state);
+                            }
+                        });
+                    } else {
+                        this.startSettlingAnimation(child, state);
+                    }
+
+                }
+            }
+        }
+    }
+
+    public final int getState() {
+        return this.state;
+    }
+
+    void setStateInternal(int state) {
+        if (this.state != state) {
+            this.state = state;
+            if (state != STATE_HALF_EXPANDED && state != STATE_EXPANDED) {
+                if (state == STATE_HIDDEN || state == STATE_COLLAPSED) {
+                    this.updateImportantForAccessibility(false);
+                }
+            } else {
+                this.updateImportantForAccessibility(true);
+            }
+
+            View bottomSheet = (View) this.viewRef.get();
+            if (bottomSheet != null && this.callback != null) {
+                this.callback.onStateChanged(bottomSheet, state);
+            }
+
+        }
+    }
+
+    private void calculateCollapsedOffset() {
+        if (this.fitToContents) {
+            this.collapsedOffset = Math.max(this.parentHeight - this.lastPeekHeight, this.fitToContentsOffset);
+        } else {
+            this.collapsedOffset = this.parentHeight - this.lastPeekHeight;
+        }
+
+    }
+
+    private void reset() {
+        this.activePointerId = -1;
+        if (this.velocityTracker != null) {
+            this.velocityTracker.recycle();
+            this.velocityTracker = null;
+        }
+
+    }
+
+    boolean shouldHide(View child, float yvel) {
+        if (this.skipCollapsed) {
+            return true;
+        } else if (child.getTop() < this.collapsedOffset) {
+            return false;
+        } else {
+            float newTop = (float) child.getTop() + yvel * HIDE_FRICTION;
+            return Math.abs(newTop - (float) this.collapsedOffset) / (float) this.peekHeight > HIDE_THRESHOLD;
+        }
+    }
+
+    @VisibleForTesting
+    View findScrollingChild(View view) {
+        if (ViewCompat.isNestedScrollingEnabled(view)) {
+            return view;
+        } else {
+            if (view instanceof ViewGroup) {
+                ViewGroup group = (ViewGroup) view;
+                int i = 0;
+
+                for (int count = group.getChildCount(); i < count; ++i) {
+                    View scrollingChild = this.findScrollingChild(group.getChildAt(i));
+                    if (scrollingChild != null) {
+                        return scrollingChild;
+                    }
+                }
+            }
+
+            return null;
+        }
+    }
+
+    private float getYVelocity() {
+        if (this.velocityTracker == null) {
+            return 0.0F;
+        } else {
+            this.velocityTracker.computeCurrentVelocity(1000, this.maximumVelocity);
+            return this.velocityTracker.getYVelocity(this.activePointerId);
+        }
+    }
+
+    private int getExpandedOffset() {
+        return this.fitToContents ? this.fitToContentsOffset : 0;
+    }
+
+    void startSettlingAnimation(View child, int state) {
+        int top;
+        if (state == STATE_COLLAPSED) {
+            top = this.collapsedOffset;
+        } else if (state == STATE_HALF_EXPANDED) {
+            top = this.halfExpandedOffset;
+        } else if (state == STATE_EXPANDED) {
+            top = this.getExpandedOffset();
+        } else {
+            if (!this.hideable || state != STATE_HIDDEN) {
+                throw new IllegalArgumentException("Illegal state argument: " + state);
+            }
+
+            top = this.parentHeight;
+        }
+
+        if (this.viewDragHelper.smoothSlideViewTo(child, child.getLeft(), top)) {
+            this.setStateInternal(STATE_SETTLING);
+            ViewCompat.postOnAnimation(child, new SettleRunnable(child, state));
+        } else {
+            this.setStateInternal(state);
+        }
+
+    }
+
+    void dispatchOnSlide(int top) {
+        View bottomSheet = (View) this.viewRef.get();
+        if (bottomSheet != null && this.callback != null) {
+            if (top > this.collapsedOffset) {
+                this.callback.onSlide(bottomSheet, (float) (this.collapsedOffset - top) / (float) (this.parentHeight - this.collapsedOffset));
+            } else {
+                this.callback.onSlide(bottomSheet, (float) (this.collapsedOffset - top) / (float) (this.collapsedOffset - this.getExpandedOffset()));
+            }
+        }
+
+    }
+
+    @VisibleForTesting
+    int getPeekHeightMin() {
+        return this.peekHeightMin;
+    }
+
+    public static <V extends View> GaoDeBottomSheetBehavior<V> from(V view) {
+        LayoutParams params = view.getLayoutParams();
+        if (!(params instanceof CoordinatorLayout.LayoutParams)) {
+            throw new IllegalArgumentException("The view is not a child of CoordinatorLayout");
+        } else {
+            Behavior behavior = ((CoordinatorLayout.LayoutParams) params).getBehavior();
+            if (!(behavior instanceof GaoDeBottomSheetBehavior)) {
+                throw new IllegalArgumentException("The view is not associated with BottomSheetBehavior");
+            } else {
+                return (GaoDeBottomSheetBehavior) behavior;
+            }
+        }
+    }
+
+    @SuppressLint("WrongConstant")
+    private void updateImportantForAccessibility(boolean expanded) {
+        if (this.viewRef != null) {
+            ViewParent viewParent = ((View) this.viewRef.get()).getParent();
+            if (viewParent instanceof CoordinatorLayout) {
+                CoordinatorLayout parent = (CoordinatorLayout) viewParent;
+                int childCount = parent.getChildCount();
+                if (VERSION.SDK_INT >= 16 && expanded) {
+                    if (this.importantForAccessibilityMap != null) {
+                        return;
+                    }
+
+                    this.importantForAccessibilityMap = new HashMap(childCount);
+                }
+
+                for (int i = 0; i < childCount; ++i) {
+                    View child = parent.getChildAt(i);
+                    if (child != this.viewRef.get()) {
+                        if (!expanded) {
+                            if (this.importantForAccessibilityMap != null && this.importantForAccessibilityMap.containsKey(child)) {
+                                ViewCompat.setImportantForAccessibility(child, (Integer) this.importantForAccessibilityMap.get(child));
+                            }
+                        } else {
+                            if (VERSION.SDK_INT >= 16) {
+                                this.importantForAccessibilityMap.put(child, child.getImportantForAccessibility());
+                            }
+
+                            ViewCompat.setImportantForAccessibility(child, 4);
+                        }
+                    }
+                }
+
+                if (!expanded) {
+                    this.importantForAccessibilityMap = null;
+                }
+
+            }
+        }
+    }
+
+    protected static class SavedState extends AbsSavedState {
+        final int state;
+        public static final Creator<SavedState> CREATOR = new ClassLoaderCreator<SavedState>() {
+            @Override
+            public SavedState createFromParcel(Parcel in, ClassLoader loader) {
+                return new SavedState(in, loader);
+            }
+
+            @Override
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in, (ClassLoader) null);
+            }
+
+            @Override
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+
+        public SavedState(Parcel source) {
+            this(source, (ClassLoader) null);
+        }
+
+        public SavedState(Parcel source, ClassLoader loader) {
+            super(source, loader);
+            this.state = source.readInt();
+        }
+
+        public SavedState(Parcelable superState, int state) {
+            super(superState);
+            this.state = state;
+        }
+
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            super.writeToParcel(out, flags);
+            out.writeInt(this.state);
+        }
+    }
+
+    private class SettleRunnable implements Runnable {
+        private final View view;
+        private final int targetState;
+
+        SettleRunnable(View view, int targetState) {
+            this.view = view;
+            this.targetState = targetState;
+        }
+
+        @Override
+        public void run() {
+            if (GaoDeBottomSheetBehavior.this.viewDragHelper != null && GaoDeBottomSheetBehavior.this.viewDragHelper.continueSettling(true)) {
+                ViewCompat.postOnAnimation(this.view, this);
+            } else {
+                GaoDeBottomSheetBehavior.this.setStateInternal(this.targetState);
+            }
+
+        }
+    }
+
+    @Retention(RetentionPolicy.SOURCE)
+    @RestrictTo({Scope.LIBRARY_GROUP})
+    public @interface State {
+    }
+
+    public abstract static class BottomSheetCallback {
+        public BottomSheetCallback() {
+        }
+
+        public abstract void onStateChanged(@NonNull View var1, int var2);
+
+        public abstract void onSlide(@NonNull View var1, float var2);
+    }
+}

+ 28 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/utils/JsonUtil.java

@@ -0,0 +1,28 @@
+package com.sjkj.appthreefloor_tsgz.utils;
+
+import android.content.Context;
+import android.content.res.AssetManager;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+public class JsonUtil {
+    public static String loadJSONFromAsset(Context context, String filename) {
+        String json = null;
+        try {
+            AssetManager assetManager = context.getAssets();
+            InputStream is = assetManager.open(filename);
+            int size = is.available();
+            byte[] buffer = new byte[size];
+            is.read(buffer);
+            is.close();
+            json = new String(buffer, "UTF-8");
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            return null;
+        }
+        return json;
+    }
+}

+ 91 - 0
app/src/main/java/com/sjkj/appthreefloor_tsgz/weight/CustomRecycleView.java

@@ -0,0 +1,91 @@
+package com.sjkj.appthreefloor_tsgz.weight;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.kongzue.dialogx.interfaces.ScrollController;
+
+/**
+ * 自定义滑动布局范例。此处以 RecyclerView 为主要例子
+ * 请注意实现 ScrollController,BottomDialog 需要根据此接口给出的数据进行滑动事件拦截的处理和判断
+ *
+ * @author: Kongzue
+ * @github: https://github.com/kongzue/
+ * @homepage: http://kongzue.com/
+ * @mail: myzcxhh@live.cn
+ * @createTime: 2021/8/5 9:23
+ */
+public class CustomRecycleView extends RecyclerView implements ScrollController {
+    
+    public CustomRecycleView(@NonNull Context context) {
+        super(context);
+    }
+    
+    public CustomRecycleView(@NonNull Context context, @Nullable AttributeSet attrs) {
+        super(context, attrs);
+    }
+    
+    public CustomRecycleView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+    
+    /**
+     * 滑动锁定判断依据,若此标记被置为 true,则意味着滑动由父布局处理,请勿进行任何滚动操作。
+     * 具体请参考 {@link #onTouchEvent(MotionEvent)} 的处理方案,其他诸如 ScrollView 处理方式相同。
+     */
+    boolean lockScroll;
+    
+    @Override
+    public boolean isLockScroll() {
+        return lockScroll;
+    }
+    
+    @Override
+    public void lockScroll(boolean lockScroll) {
+        this.lockScroll = lockScroll;
+    }
+    
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (lockScroll) {
+            return false;
+        }
+        return super.onTouchEvent(ev);
+    }
+    
+    /**
+     * 是否可以滑动判断依据,若当前滑动布局内容高度小于布局高度则为不可滑动。
+     * 此处列举的是 RecycleView 的判断依据编写方法,
+     * ScrollView 的范例请参考 {@link com.kongzue.dialogx.util.views.BottomDialogScrollView#isCanScroll()}
+     *
+     * @return 是否可滑动
+     */
+    @Override
+    public boolean isCanScroll() {
+        return canScrollVertically(1) || canScrollVertically(-1);
+    }
+    
+    /**
+     * 此处请给出已滑动距离值,BottomDialog 需要根据此值判断当子布局滑动过程中,父布局是否需要介入滑动流程。
+     * 此处列举的是 RecycleView 的判断依据编写方法,
+     * ScrollView 的范例请参考 {@link com.kongzue.dialogx.util.views.BottomDialogScrollView#getScrollDistance()}
+     *
+     * @return 已滑动距离
+     */
+    public int getScrollDistance() {
+        LinearLayoutManager layoutManager = (LinearLayoutManager) getLayoutManager();
+        View firstVisibleItem = this.getChildAt(0);
+        int firstItemPosition = layoutManager.findFirstVisibleItemPosition();
+        int itemHeight = firstVisibleItem.getHeight();
+        int firstItemBottom = layoutManager.getDecoratedBottom(firstVisibleItem);
+        return (firstItemPosition + 1) * itemHeight - firstItemBottom;
+    }
+    
+}

BIN
app/src/main/res/drawable-xxhdpi/icon_back.png


BIN
app/src/main/res/drawable-xxhdpi/icon_choose.png


BIN
app/src/main/res/drawable-xxhdpi/icon_dx.png


BIN
app/src/main/res/drawable-xxhdpi/icon_dxxz.png


BIN
app/src/main/res/drawable-xxhdpi/icon_event_current.png


BIN
app/src/main/res/drawable-xxhdpi/icon_event_current_select.png


BIN
app/src/main/res/drawable-xxhdpi/icon_event_daohang.png


BIN
app/src/main/res/drawable-xxhdpi/icon_xia.png


+ 7 - 0
app/src/main/res/drawable/bg_event_completed.xml

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

+ 7 - 0
app/src/main/res/drawable/bg_event_completed_select.xml

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

+ 7 - 0
app/src/main/res/drawable/bg_event_finish.xml

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

+ 7 - 0
app/src/main/res/drawable/bg_event_refuse.xml

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

+ 9 - 0
app/src/main/res/drawable/rounded_corners10.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#FFFFFF"/> <!-- 背景颜色 -->
+    <corners
+        android:topLeftRadius="10dp"
+        android:topRightRadius="10dp"
+        android:bottomLeftRadius="0dp"
+        android:bottomRightRadius="0dp"/>
+</shape>

+ 9 - 0
app/src/main/res/drawable/rounded_left_right.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#F8F8F8"/> <!-- 背景颜色 -->
+    <corners
+        android:topLeftRadius="10dp"
+        android:topRightRadius="10dp"
+        android:bottomLeftRadius="0dp"
+        android:bottomRightRadius="0dp"/>
+</shape>

+ 9 - 0
app/src/main/res/drawable/rounded_leftbootom_rightbootom.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="#F8F8F8"/> <!-- 背景颜色 -->
+    <corners
+        android:topLeftRadius="0dp"
+        android:topRightRadius="0dp"
+        android:bottomLeftRadius="10dp"
+        android:bottomRightRadius="10dp"/>
+</shape>

+ 48 - 0
app/src/main/res/layout/activity_event_details.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.activity.viewModel.EventCenterViewModel" />
+    </data>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fadeScrollbars="true"
+        android:fitsSystemWindows="true"
+        android:orientation="vertical">
+
+
+        <RelativeLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/white">
+
+            <com.google.android.material.tabs.TabLayout
+                android:id="@+id/tabLayout"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                app:tabGravity="fill"
+                app:tabIndicatorColor="@color/event_tab_select_color"
+                app:tabIndicatorFullWidth="false"
+                app:tabIndicatorHeight="4dp"
+                app:tabMode="fixed"
+                app:tabRippleColor="@android:color/transparent"
+                app:tabSelectedTextColor="@color/event_tab_select_color"
+                app:tabTextAppearance="@style/TabLayoutStyle"
+                app:tabTextColor="@color/event_tab_color" />
+        </RelativeLayout>
+
+        <androidx.viewpager.widget.ViewPager
+            android:id="@+id/view_pager"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+        </androidx.viewpager.widget.ViewPager>
+    </LinearLayout>
+</layout>

+ 197 - 0
app/src/main/res/layout/fragment_event_details.xml

@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.fragment.viewModel.EventFargmentViewModel" />
+    </data>
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#ECEDF4"
+        android:fadeScrollbars="true"
+        android:fitsSystemWindows="true"
+        android:orientation="vertical">
+
+        <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+            <RelativeLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+
+                <LinearLayout
+                    android:id="@+id/ll_title"
+                    android:layout_width="match_parent"
+                    android:layout_height="110dp"
+                    android:layout_margin="15dp"
+                    android:background="@drawable/round_corner_top_letf_right"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_marginLeft="15dp"
+                        android:layout_marginTop="10dp"
+                        android:layout_marginRight="15dp"
+                        android:ellipsize="end"
+                        android:lineSpacingExtra="2dp"
+                        android:maxLines="2"
+                        android:textColor="@color/black"
+                        android:textSize="17dp" />
+
+                    <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_marginLeft="15dp"
+                        android:layout_marginTop="5dp"
+                        android:layout_marginRight="15dp"
+                        android:layout_marginBottom="10dp"
+                        android:gravity="center_vertical">
+
+                        <TextView
+                            android:id="@+id/tv_completed"
+                            android:layout_width="70dp"
+                            android:layout_height="30dp"
+                            android:layout_marginRight="10dp"
+                            android:background="@drawable/bg_event_completed"
+                            android:gravity="center_horizontal|center_vertical"
+                            android:text="签收"
+                            android:textColor="#04BF60">
+
+                        </TextView>
+
+                        <TextView
+                            android:id="@+id/tv_refuse"
+                            android:layout_width="70dp"
+                            android:layout_height="30dp"
+                            android:layout_marginRight="10dp"
+                            android:background="@drawable/bg_event_refuse"
+                            android:gravity="center_horizontal|center_vertical"
+                            android:text="签收"
+                            android:textColor="#FD6350">
+
+                        </TextView>
+
+                        <TextView
+                            android:id="@+id/tv_finish"
+                            android:layout_width="70dp"
+                            android:layout_height="30dp"
+                            android:background="@drawable/bg_event_finish"
+                            android:gravity="center_horizontal|center_vertical"
+                            android:text="签收"
+                            android:textColor="#EDAC00">
+
+                        </TextView>
+
+                        <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="30dp"
+                            android:gravity="right|center_vertical"
+                            android:textColor="@color/coler_evnet" />
+                    </LinearLayout>
+                </LinearLayout>
+
+                <LinearLayout
+
+                    android:id="@+id/ll_head"
+                    android:layout_width="match_parent"
+                    android:layout_height="40dp"
+                    android:layout_below="@+id/ll_title"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginRight="15dp"
+                    android:background="@drawable/rounded_left_right">
+
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center_vertical|center_horizontal"
+                        android:text="部门"
+                        android:textColor="#5F6162">
+
+                    </TextView>
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center_vertical|center_horizontal"
+                        android:text="状态"
+                        android:textColor="#5F6162">
+
+                    </TextView>
+
+                    <TextView
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:gravity="center_vertical|center_horizontal"
+                        android:text="时间"
+                        android:textColor="#5F6162">
+
+                    </TextView>
+
+                </LinearLayout>
+
+                <LinearLayout
+                    android:id="@+id/ll_conten"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@+id/ll_head"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginRight="15dp"
+                    android:background="@drawable/rounded_leftbootom_rightbootom">
+
+                    <androidx.recyclerview.widget.RecyclerView
+                        android:id="@+id/recyclerView"
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:overScrollMode="never" />
+
+                </LinearLayout>
+
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_below="@+id/ll_conten"
+                    android:layout_marginLeft="15dp"
+                    android:layout_marginTop="10dp"
+                    android:layout_marginRight="15dp"
+                    android:background="@drawable/round_corner_top_letf_right">
+
+                    <TextView
+
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:lineSpacingExtra="2dp"
+                        android:textColor="#767676">
+
+                    </TextView>
+
+                </LinearLayout>
+
+
+                <ImageView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_alignParentRight="true"
+                    android:layout_alignParentBottom="true"
+                    android:layout_marginRight="15dp"
+                    android:layout_marginBottom="40dp"
+
+                    android:background="@drawable/icon_event_daohang" />
+            </RelativeLayout>
+        </FrameLayout>
+    </LinearLayout>
+
+
+</layout>

+ 31 - 0
app/src/main/res/layout/fragment_event_message.xml

@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.fragment.viewModel.EventFargmentViewModel" />
+    </data>
+
+    <LinearLayout
+        android:id="@+id/ll_title"
+        android:fadeScrollbars="true"
+        android:fitsSystemWindows="true"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+
+
+        <TextView
+            android:text="消息"
+            android:gravity="center_horizontal|center_vertical"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent">
+
+        </TextView>
+    </LinearLayout>
+
+
+</layout>

+ 137 - 0
app/src/main/res/layout/fragment_event_nearby.xml

@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <variable
+            name="viewModel"
+            type="com.sjkj.appthreefloor_tsgz.fragment.viewModel.EventFargmentViewModel" />
+    </data>
+
+    <androidx.coordinatorlayout.widget.CoordinatorLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <com.amap.api.maps.TextureMapView
+            android:id="@+id/map_view"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+
+
+        <FrameLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="right|bottom"
+            android:layout_marginBottom="280dp">
+
+            <ImageView
+
+                android:id="@+id/iv_location"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentEnd="true"
+                android:layout_alignParentBottom="true"
+                android:layout_margin="15dp"
+                android:background="@drawable/icon_event_current_select" />
+        </FrameLayout>
+
+        <LinearLayout
+            android:id="@+id/bottom_sheet"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="vertical"
+
+            app:behavior_hideable="true"
+            app:behavior_middleHeight="300dp"
+
+            app:behavior_peekHeight="300dp"
+            app:layout_behavior=".utils.GaoDeBottomSheetBehavior">
+
+
+            <ImageView
+                android:id="@+id/layout_bottom_sheet"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_alignParentBottom="true"
+                android:layout_gravity="center_horizontal"
+                android:layout_marginBottom="10dp"
+                android:background="@drawable/icon_xia"
+                android:gravity="center"
+                android:orientation="vertical" />
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/rounded_corners10"
+                android:orientation="vertical">
+
+                <RelativeLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="100dp">
+
+                    <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="match_parent"
+                        android:layout_centerInParent="true"
+                        android:layout_marginLeft="15dp"
+                        android:layout_marginTop="15dp"
+                        android:layout_marginBottom="15dp"
+                        android:layout_toLeftOf="@+id/ic_event_location"
+                        android:ellipsize="end"
+                        android:gravity="center_vertical"
+                        android:lineSpacingExtra="1dp"
+                        android:maxLines="2"
+                        android:text="林区火险等级三维监测与预警响应林区火险等级"
+                        android:textColor="@color/black"
+                        android:textSize="17dp">
+
+                    </TextView>
+
+                    <ImageView
+                        android:id="@+id/ic_event_location"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_alignParentEnd="true"
+                        android:layout_alignParentRight="true"
+                        android:layout_alignParentBottom="true"
+                        android:layout_centerVertical="true"
+                        android:layout_margin="15dp"
+                        android:background="@drawable/icon_event_current" />
+                </RelativeLayout>
+
+
+                <View
+                    android:layout_width="match_parent"
+                    android:layout_height="1dp"
+                    android:background="@color/gray3" />
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="horizontal"
+                    android:weightSum="4">
+
+                    <com.sjkj.appthreefloor_tsgz.weight.CustomRecycleView
+                        android:id="@+id/recyclerView_left"
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="1"
+                        android:isScrollContainer="false"
+                        android:tag="ScrollController" />
+
+                    <androidx.recyclerview.widget.RecyclerView
+                        android:id="@+id/recyclerView_right"
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_marginLeft="5dp"
+                        android:layout_weight="3"
+                        android:background="@color/white"
+                        android:scrollbars="vertical" />
+                </LinearLayout>
+
+            </LinearLayout>
+
+        </LinearLayout>
+    </androidx.coordinatorlayout.widget.CoordinatorLayout>
+</layout>

+ 35 - 0
app/src/main/res/layout/item_classify_right_ziyuan.xml

@@ -0,0 +1,35 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <LinearLayout
+        android:id="@+id/item_layout"
+        android:layout_width="match_parent"
+        android:layout_height="45dp"
+        android:background="@color/white"
+        android:gravity="center_vertical"
+        android:paddingLeft="15dp"
+        android:paddingRight="15dp">
+
+
+        <TextView
+            android:id="@+id/text"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:gravity="left|center_vertical"
+            android:maxLines="1"
+            android:text=""
+            android:textColor="#4D4D4D"
+            android:textSize="16dp" />
+
+        <ImageView
+            android:id="@+id/iv_checkbox"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical"
+            android:background="@drawable/icon_dxxz"
+            android:visibility="invisible" />
+    </LinearLayout>
+
+</RelativeLayout>

+ 59 - 0
app/src/main/res/layout/item_classify_right_ziyuan2.xml

@@ -0,0 +1,59 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <RelativeLayout
+        android:id="@+id/item_layout"
+        android:layout_width="match_parent"
+        android:layout_height="55dp">
+
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_toLeftOf="@+id/iv_next"
+            android:orientation="vertical">
+
+            <TextView
+
+                android:id="@+id/text"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginLeft="15dp"
+
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:gravity="left|bottom"
+                android:maxLines="1"
+                android:textColor="#4D4D4D"
+                android:textSize="16dp" />
+
+            <TextView
+
+                android:id="@+id/tv_distance"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginLeft="15dp"
+                android:layout_weight="1"
+                android:ellipsize="end"
+                android:layout_marginTop="3dp"
+                android:gravity="left|top"
+                android:maxLines="1"
+                android:textColor="#4D4D4D"
+                android:textSize="14dp" />
+        </LinearLayout>
+
+
+        <ImageView
+            android:id="@+id/iv_next"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentRight="true"
+            android:layout_centerVertical="true"
+            android:layout_gravity="center_vertical"
+            android:layout_marginRight="15dp"
+            android:background="@drawable/icon_back"
+            android:checked="false" />
+    </RelativeLayout>
+
+</RelativeLayout>

+ 10 - 0
app/src/main/res/layout/item_classify_rv_adapter.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/classsify_tv"
+    android:layout_width="100dp"
+    android:layout_height="44dp"
+    android:gravity="center"
+    android:paddingTop="5dp"
+    android:paddingBottom="5dp"
+    android:text="林业"
+    android:textSize="16dp" />

+ 8 - 0
app/src/main/res/values/attrs.xml

@@ -48,4 +48,12 @@
 <!--            <flag name="CALL_BACK_MODE_STATE_CHANGE" value="1" />-->
 <!--        </attr>-->
 <!--    </declare-styleable>-->
+
+    <declare-styleable name="BottomSheetBehavior_Layout">
+        <attr name="behavior_peekHeight" format="dimension" />
+        <attr name="behavior_hideAble" format="boolean" />
+        <attr name="behavior_skipCollapse" format="dimension" />
+        <attr name="behavior_middleHeight" format="dimension" />
+        <attr name="behavior_fitToContents" format="boolean" />
+    </declare-styleable>
 </resources>

+ 4 - 0
app/src/main/res/values/colors.xml

@@ -66,5 +66,9 @@
     <color name="color_bg_gray_input">#F6F6F6</color>
     <color name="coler_evnet">#9E9E9E</color>
     <color name="event_color">#0F5FEE</color>
+    <color name="event_tab_select_color">#366CFF</color>
+    <color name="event_tab_color">#202022</color>
+    <color name="recyclerview_left_select">#F7F7F7</color>
+    <color name="recyclerview_lefttext_select">#4D4D4D</color>
 
 </resources>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -143,7 +143,7 @@
     <string name="demo_android_13_read_media_permission_hint">当前版本不是 Android 13 及以上,会自动变更为旧版的请求方式</string>
     <string name="demo_android_11_manage_storage_permission_hint">当前版本不是 Android 11 及以上,会自动变更为旧版的请求方式</string>
     <string name="demo_android_13_post_notification_permission_hint">当前版本不是 Android 13 及以上,会自动变更为旧版的请求方式</string>
-    <string name="demo_notification_listener_toast">监听到新的通知消息,标题为:%s,内容为:%s</string>
+<!--    <string name="demo_notification_listener_toast">监听到新的通知消息,标题为:%s,内容为:%s</string>-->
 
     <string name="demo_request_single_dangerous_permission">申请单个危险权限</string>
     <string name="demo_request_multiple_dangerous_permission">申请多个危险权限</string>

+ 2 - 2
base-lib/src/main/res/layout/title_layout.xml

@@ -6,7 +6,7 @@
     <TextView
         android:id="@+id/title_back"
         android:layout_width="wrap_content"
-        android:layout_height="50dp"
+        android:layout_height="wrap_content"
         android:layout_centerVertical="true"
         android:drawableLeft="@drawable/icon_back_white"
         android:paddingTop="5dp"
@@ -28,7 +28,7 @@
         android:singleLine="true"
         android:text=""
         android:textColor="@android:color/white"
-        android:textSize="15dp" />
+        android:textSize="18dp" />
 
     <TextView
         android:id="@+id/title_right"