Pārlūkot izejas kodu

访客登记优化

ifengouy 2 gadi atpakaļ
vecāks
revīzija
1037adc222
24 mainītis faili ar 876 papildinājumiem un 195 dzēšanām
  1. 1 1
      app/src/main/java/com/sunwin/visitorapp/BaseApplication.java
  2. 29 0
      app/src/main/java/com/sunwin/visitorapp/BaseFragment.java
  3. 4 1
      app/src/main/java/com/sunwin/visitorapp/LoginActivity.java
  4. 4 1
      app/src/main/java/com/sunwin/visitorapp/activity/HomeAc.java
  5. 9 6
      app/src/main/java/com/sunwin/visitorapp/activity/IdcardRegActivity.java
  6. 4 77
      app/src/main/java/com/sunwin/visitorapp/activity/NoCardRegActivity.java
  7. 103 17
      app/src/main/java/com/sunwin/visitorapp/activity/VisitorRegActivity.java
  8. 12 12
      app/src/main/java/com/sunwin/visitorapp/adapter/CardAdapter.java
  9. 68 0
      app/src/main/java/com/sunwin/visitorapp/adapter/VisitorRegAdapter.java
  10. 117 0
      app/src/main/java/com/sunwin/visitorapp/fragment/IdcardRegFragment.java
  11. 116 0
      app/src/main/java/com/sunwin/visitorapp/fragment/NoCardRegFragment.java
  12. 116 0
      app/src/main/java/com/sunwin/visitorapp/fragment/RegTypeFragment.java
  13. 13 0
      app/src/main/java/com/sunwin/visitorapp/net/ApiService.java
  14. 31 0
      app/src/main/java/com/sunwin/visitorapp/net/BaseRsult.java
  15. 118 0
      app/src/main/java/com/sunwin/visitorapp/net/RetrofitUtil.java
  16. 6 5
      app/src/main/java/com/sunwin/visitorapp/utils/Constant.java
  17. 1 11
      app/src/main/res/layout/activity_no_card_reg.xml
  18. 21 48
      app/src/main/res/layout/activity_visitor_reg.xml
  19. 10 16
      app/src/main/res/layout/adapter_card.xml
  20. 27 0
      app/src/main/res/layout/adapter_visitor_reg.xml
  21. 37 0
      app/src/main/res/layout/fragment_id_card_reg.xml
  22. 13 0
      app/src/main/res/layout/fragment_no_card_reg.xml
  23. 16 0
      app/src/main/res/layout/fragment_reg_type.xml
  24. BIN
      app/src/main/res/mipmap-xhdpi/visitor_reg_default.png

+ 1 - 1
app/src/main/java/com/sunwin/visitorapp/BaseApplication.java

@@ -32,7 +32,7 @@ public class BaseApplication extends Application {
         Timber.plant(new Timber.DebugTree());
 
         CacheUtil.init(this);
-        PresentationManager.checkAndShow(this);
+//        PresentationManager.checkAndShow(this);
     }
 
     public static Context getInstance() {

+ 29 - 0
app/src/main/java/com/sunwin/visitorapp/BaseFragment.java

@@ -0,0 +1,29 @@
+package com.sunwin.visitorapp;
+
+import android.app.Activity;
+import android.content.Context;
+import android.os.Bundle;
+
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.sunwin.visitorapp.view.LoadingDialog;
+
+public class BaseFragment extends Fragment {
+    protected static String TAG = "";
+    protected Activity mContext;
+    private LoadingDialog loadingDialog;
+
+
+    public void onAttach(Context context) {
+        super.onAttach(context);
+        mContext = (Activity) context;
+    }
+
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        TAG = getClass().getSimpleName();
+        loadingDialog = new LoadingDialog(mContext, "玩命加载中...");
+    }
+}

+ 4 - 1
app/src/main/java/com/sunwin/visitorapp/LoginActivity.java

@@ -8,6 +8,7 @@ import android.widget.EditText;
 
 import com.sunwin.visitorapp.activity.HomeAc;
 import com.sunwin.visitorapp.activity.VisitorRegActivity;
+import com.sunwin.visitorapp.utils.Constant;
 
 public class LoginActivity extends BaseActivity implements View.OnClickListener {
     private EditText mEtUserName;
@@ -36,7 +37,9 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
     public void onClick(View view) {
         switch (view.getId()) {
             case R.id.btn_login_by_self:
-                startActivity(new Intent(this, VisitorRegActivity.class));
+                Intent intent = new Intent(this, VisitorRegActivity.class);
+                intent.putExtra(Constant.IIntentValue.ISLOGINUSER, false);
+                startActivity(intent);
                 break;
         }
     }

+ 4 - 1
app/src/main/java/com/sunwin/visitorapp/activity/HomeAc.java

@@ -10,6 +10,7 @@ import androidx.fragment.app.FragmentTransaction;
 import com.sunwin.visitorapp.BaseActivity;
 import com.sunwin.visitorapp.R;
 import com.sunwin.visitorapp.fragment.HomeFr;
+import com.sunwin.visitorapp.utils.Constant;
 
 public class HomeAc extends BaseActivity {
 
@@ -32,7 +33,9 @@ public class HomeAc extends BaseActivity {
         findViewById(R.id.MenuItemRegister).setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                startActivity(new Intent(mContext,VisitorRegisterAc.class));
+                Intent intent = new Intent(HomeAc.this, VisitorRegActivity.class);
+                intent.putExtra(Constant.IIntentValue.ISLOGINUSER, true);
+                startActivity(intent);
             }
         });
 

+ 9 - 6
app/src/main/java/com/sunwin/visitorapp/activity/IdcardRegActivity.java

@@ -1,10 +1,8 @@
 package com.sunwin.visitorapp.activity;
 
-import android.graphics.Bitmap;
 import android.os.Bundle;
 import android.view.View;
 import android.widget.AdapterView;
-import android.widget.CalendarView;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
@@ -40,6 +38,7 @@ public class IdcardRegActivity extends BaseActivity implements View.OnClickListe
     private CardAdapter mAdapter;
 
     private IDCardReaderUtil idCardReaderUtil;
+    private int[] backgroundRes;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -60,12 +59,13 @@ public class IdcardRegActivity extends BaseActivity implements View.OnClickListe
     }
 
     @Override
-    protected void onDestroy() {
-        super.onDestroy();
+    protected void onPause() {
+        super.onPause();
         idCardReaderUtil.stopRead();
         mFaceDetecterView.onDestroy();
     }
 
+
     private void initData() {
         itemList.add("访客记录");
         itemList.add("访客签到");
@@ -77,6 +77,9 @@ public class IdcardRegActivity extends BaseActivity implements View.OnClickListe
         iconList.add(R.mipmap.ic_launcher);
         iconList.add(R.mipmap.ic_launcher);
         iconList.add(R.mipmap.ic_launcher);
+
+        backgroundRes = new int[]{R.drawable.menu_orange, R.drawable.menu_green, R.drawable.menu_yellow, R.drawable.menu_red, R.drawable.menu_gray};
+
         mAdapter.notifyDataSetChanged();
     }
 
@@ -89,8 +92,8 @@ public class IdcardRegActivity extends BaseActivity implements View.OnClickListe
         mFaceDetecterView = findViewById(R.id.faceDetecterView);
         mGridview = findViewById(R.id.gridview);
 
-
-        mAdapter = new CardAdapter(itemList, iconList);
+//
+//        mAdapter = new CardAdapter(itemList, iconList, backgroundRes);
         mGridview.setAdapter(mAdapter);
         mGridview.setOnItemClickListener(this);
 

+ 4 - 77
app/src/main/java/com/sunwin/visitorapp/activity/NoCardRegActivity.java

@@ -1,34 +1,21 @@
 package com.sunwin.visitorapp.activity;
 
-import android.content.Intent;
 import android.os.Bundle;
-import android.os.Handler;
 import android.view.View;
 import android.widget.TextView;
 
 import com.sunwin.visitorapp.BaseActivity;
 import com.sunwin.visitorapp.BaseApplication;
 import com.sunwin.visitorapp.R;
-import com.sunwin.visitorapp.face.CameraPreviewData;
-import com.sunwin.visitorapp.model.OpenDoorByFaceNetResultInfo;
-import com.sunwin.visitorapp.utils.Constant;
-import com.sunwin.visitorapp.utils.FileUtil;
-import com.sunwin.visitorapp.utils.LogUtil;
-import com.sunwin.visitorapp.utils.ToastUtils;
-import com.sunwin.visitorapp.view.FaceDetecterView;
-
-import java.io.File;
-import java.io.IOException;
+import com.sunwin.visitorapp.fragment.NoCardRegFragment;
 
 /**
  *
  */
-public class NoCardRegActivity extends BaseActivity implements View.OnClickListener, FaceDetecterView.Listener {
+public class NoCardRegActivity extends BaseActivity implements View.OnClickListener{
 
     private TextView mTvHeadTitle;
 
-    private FaceDetecterView mFaceDetecterView;
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -36,27 +23,14 @@ public class NoCardRegActivity extends BaseActivity implements View.OnClickListe
         initView();
     }
 
-    @Override
-    protected void onResume() {
-        super.onResume();
-        mFaceDetecterView.onResume();
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mFaceDetecterView.onDestroy();
-    }
 
     private void initView() {
-        mFaceDetecterView = findViewById(R.id.faceDetecterView);
         mTvHeadTitle = (TextView) findViewById(R.id.tv_head_title);
         findViewById(R.id.head_iv_back).setOnClickListener(this);
-        mFaceDetecterView.config(this, this);
-        mFaceDetecterView.needTakePic = true;
         mTvHeadTitle.setText("访客登记");
         BaseApplication.getSystemTTS().playText("请看摄像头");
-
+        getSupportFragmentManager().beginTransaction().add(R.id.fl_content,
+                new NoCardRegFragment()).commit();
     }
 
     @Override
@@ -67,51 +41,4 @@ public class NoCardRegActivity extends BaseActivity implements View.OnClickListe
                 break;
         }
     }
-
-    /**
-     * ------------------FaceDetecterView.Listener 开始------------------------------
-     */
-    @Override
-    public void detectedFace() {
-
-    }
-
-    @Override
-    public void detectedUser(OpenDoorByFaceNetResultInfo openDoorByFaceNetResultInfo) {
-
-    }
-
-    @Override
-    public void detecterFail(String st) {
-
-    }
-
-    @Override
-    public void takePic(CameraPreviewData data) {
-        String saveFilePath = Constant.RecognitionDir + "face_" + System.currentTimeMillis() + ".jpg";
-        LogUtil.e(TAG, "takePicPath = " + saveFilePath);
-        File saveFile = new File(saveFilePath);
-        saveFile.deleteOnExit();
-        try {
-            if (saveFile.createNewFile()) {
-                FileUtil.saveFile(data.nv21Data, data.width, data.height, data.rotation, saveFilePath);
-                ToastUtils.showToast("人脸采集成功");
-                new Handler().postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        Intent intent = new Intent(NoCardRegActivity.this, VisitorRegisterAc.class);
-                        intent.putExtra(Constant.IIntentValue.CURRENTFACEPATH,saveFile);
-                        startActivity(intent);
-                    }
-                },500);
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
-
-    /**
-     * ------------------FaceDetecterView.Listener 结束------------------------------
-     */
 }

+ 103 - 17
app/src/main/java/com/sunwin/visitorapp/activity/VisitorRegActivity.java

@@ -3,46 +3,132 @@ package com.sunwin.visitorapp.activity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
+import android.widget.AdapterView;
 import android.widget.TextView;
 
+import androidx.fragment.app.Fragment;
+
 import com.sunwin.visitorapp.BaseActivity;
 import com.sunwin.visitorapp.R;
+import com.sunwin.visitorapp.adapter.CardAdapter;
+import com.sunwin.visitorapp.adapter.VisitorRegAdapter;
+import com.sunwin.visitorapp.fragment.IdcardRegFragment;
+import com.sunwin.visitorapp.fragment.NoCardRegFragment;
+import com.sunwin.visitorapp.fragment.RegTypeFragment;
+import com.sunwin.visitorapp.utils.Constant;
+import com.sunwin.visitorapp.utils.ToastUtils;
+import com.sunwin.visitorapp.view.MyGridView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 访客登记页面
+ */
+public class VisitorRegActivity extends BaseActivity implements View.OnClickListener, AdapterView.OnItemClickListener, RegTypeFragment.Listener {
 
-public class VisitorRegActivity extends BaseActivity implements View.OnClickListener {
-    private ImageView mHeadIvBack;
     private TextView mTvHeadTitle;
-    private TextView mTvRight;
+    //    private MyGridView mGridview;
+    private MyGridView mGridviewBottom;
     private TextView mTvDate;
-    private LinearLayout mLlCardReg;
-    private LinearLayout mLlNoCardReg;
+    private List<String> itemList;
+    private List<Integer> iconList;
+
+    private int[] backgroundRes;
+    private int[] bottomIcon;
+    private String[] bottomItemArray;
+    public boolean isLoginUser;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_visitor_reg);
+        isLoginUser = getIntent().getBooleanExtra(Constant.IIntentValue.ISLOGINUSER, false);
+        initialData();
         initView();
     }
 
+    private void initialData() {
+        itemList = new ArrayList<>();
+        iconList = new ArrayList<>();
+        itemList.add("身份证");
+        itemList.add("无证登记");
+        iconList.add(R.mipmap.visitor_reg_default);
+        iconList.add(R.mipmap.visitor_reg_default);
+
+        if (isLoginUser) {
+            itemList.add("驾驶证");
+            iconList.add(R.mipmap.visitor_reg_default);
+        }
+
+        if (isLoginUser) {
+            backgroundRes = new int[]{R.drawable.menu_orange, R.drawable.menu_green, R.drawable.menu_yellow, R.drawable.menu_red, R.drawable.menu_gray};
+            bottomIcon = new int[]{R.drawable.ui_vector_record, R.drawable.ui_vector_sign, R.drawable.ui_vector_register, R.drawable.ui_vector_leave, R.drawable.ui_vector_check};
+            bottomItemArray = new String[]{"访客记录", "访客签到", "访客登记", "访客签离", "快速核验"};
+        }
+    }
+
     private void initView() {
-        mHeadIvBack = (ImageView) findViewById(R.id.head_iv_back);
+        findViewById(R.id.head_iv_back).setOnClickListener(this);
         mTvHeadTitle = (TextView) findViewById(R.id.tv_head_title);
-        mTvRight = (TextView) findViewById(R.id.tv_right);
         mTvDate = (TextView) findViewById(R.id.tv_date);
-        findViewById(R.id.ll_card_reg).setOnClickListener(this);
-        findViewById(R.id.ll_no_card_reg).setOnClickListener(this);
+//        mGridview = findViewById(R.id.gridview);
+        mGridviewBottom = findViewById(R.id.gridviewBottom);
+        VisitorRegAdapter adapter = new VisitorRegAdapter(itemList, iconList);
+        CardAdapter cardAdapter = new CardAdapter(bottomItemArray, bottomIcon, backgroundRes);
+//        mGridview.setAdapter(adapter);
+        mGridviewBottom.setAdapter(cardAdapter);
+
+//        mGridview.setOnItemClickListener(this);
+        mGridviewBottom.setOnItemClickListener(this);
+        mGridviewBottom.setVisibility(isLoginUser ? View.VISIBLE : View.GONE);
+        RegTypeFragment regTypeFragment = new RegTypeFragment(this);
+
+        showFragment(regTypeFragment);
     }
 
     @Override
     public void onClick(View view) {
         switch (view.getId()) {
-            case R.id.ll_card_reg:
-                startActivity(new Intent(this, IdcardRegActivity.class));
-                break;
-            case R.id.ll_no_card_reg:
-                startActivity(new Intent(this, NoCardRegActivity.class));
-                break;
         }
     }
+
+    @Override
+    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+        if (adapterView.getId() == R.id.gridview) {
+            switch (i) {
+                case 0:
+                    replaceFragment(new IdcardRegFragment());
+                    break;
+                case 1:
+                    startActivity(new Intent(this, NoCardRegActivity.class));
+                    break;
+                case 2:
+                    ToastUtils.showToast("开发中...");
+                    break;
+            }
+        } else {
+
+        }
+    }
+
+    private void replaceFragment(Fragment fragment) {
+        getSupportFragmentManager().beginTransaction().replace(R.id.fl_content,
+                fragment).commitAllowingStateLoss();
+    }
+
+    private void showFragment(Fragment fragment) {
+        getSupportFragmentManager().beginTransaction().add(R.id.fl_content,
+                fragment).commit();
+    }
+
+    @Override
+    public void showIdCardReg() {
+        replaceFragment(new IdcardRegFragment());
+    }
+
+    @Override
+    public void showNoCardReg() {
+        startActivity(new Intent(this, NoCardRegActivity.class));
+    }
 }

+ 12 - 12
app/src/main/java/com/sunwin/visitorapp/adapter/CardAdapter.java

@@ -5,33 +5,32 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.BaseAdapter;
 import android.widget.ImageView;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import com.sunwin.visitorapp.BaseApplication;
 import com.sunwin.visitorapp.R;
 
-import java.util.List;
-
 public class CardAdapter extends BaseAdapter {
     LayoutInflater inflater;
-    private List<String> itemList;
-    private List<Integer> iconRes;
-    public CardAdapter(List<String> itemList,List<Integer> iconRes) {
-        this.itemList = itemList;
-        this.iconRes = iconRes;
+    private int[] backgroundRes, bottomIcon;
+    private String[] bottomItemArray;
+
+    public CardAdapter(String[] bottomItemArray, int[] bottomIcon, int[] backgroundRes) {
+        this.bottomItemArray = bottomItemArray;
+        this.bottomIcon = bottomIcon;
+        this.backgroundRes = backgroundRes;
         inflater = LayoutInflater.from(BaseApplication.getInstance());
     }
 
 
     @Override
     public int getCount() {
-        return itemList.size();
+        return bottomItemArray.length;
     }
 
     @Override
     public Object getItem(int position) {
-        return itemList.get(position);
+        return bottomItemArray[position];
     }
 
     @Override
@@ -49,8 +48,9 @@ public class CardAdapter extends BaseAdapter {
         } else {
             holder = (ViewHolder) convertView.getTag();
         }
-        holder.item_desc.setText(itemList.get(position));
-        holder.item_icon.setImageResource(iconRes.get(position));
+        holder.item_desc.setText(bottomItemArray[position]);
+        holder.item_icon.setImageResource(bottomIcon[position]);
+        holder.item_icon.setBackgroundResource(backgroundRes[position]);
 
         return convertView;
     }

+ 68 - 0
app/src/main/java/com/sunwin/visitorapp/adapter/VisitorRegAdapter.java

@@ -0,0 +1,68 @@
+package com.sunwin.visitorapp.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.sunwin.visitorapp.BaseApplication;
+import com.sunwin.visitorapp.R;
+
+import java.util.List;
+
+public class VisitorRegAdapter  extends BaseAdapter {
+    LayoutInflater inflater;
+    private List<String> itemList;
+    private List<Integer> iconRes;
+    public VisitorRegAdapter(List<String> itemList,List<Integer> iconRes) {
+        this.itemList = itemList;
+        this.iconRes = iconRes;
+        inflater = LayoutInflater.from(BaseApplication.getInstance());
+    }
+
+
+    @Override
+    public int getCount() {
+        return itemList.size();
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return itemList.get(position);
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ViewHolder holder = null;
+        if (convertView == null) {
+            convertView = inflater.inflate(R.layout.adapter_visitor_reg, parent, false);
+            holder = new ViewHolder(convertView);
+            convertView.setTag(holder);
+        } else {
+            holder = (ViewHolder) convertView.getTag();
+        }
+        holder.item_desc.setText(itemList.get(position));
+        holder.item_icon.setImageResource(iconRes.get(position));
+
+        return convertView;
+    }
+
+
+    public static class ViewHolder {
+        public ImageView item_icon;
+        public TextView item_desc;
+
+        public ViewHolder(View rootView) {
+            this.item_icon = rootView.findViewById(R.id.item_icon);
+            this.item_desc = rootView.findViewById(R.id.item_desc);
+        }
+
+    }
+}

+ 117 - 0
app/src/main/java/com/sunwin/visitorapp/fragment/IdcardRegFragment.java

@@ -0,0 +1,117 @@
+package com.sunwin.visitorapp.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.sunwin.visitorapp.BaseApplication;
+import com.sunwin.visitorapp.BaseFragment;
+import com.sunwin.visitorapp.R;
+import com.sunwin.visitorapp.activity.NoCardRegActivity;
+import com.sunwin.visitorapp.activity.VisitorRegisterAc;
+import com.sunwin.visitorapp.face.CameraPreviewData;
+import com.sunwin.visitorapp.face.IDCardReaderUtil;
+import com.sunwin.visitorapp.face.IdCardReadCallback;
+import com.sunwin.visitorapp.model.OpenDoorByFaceNetResultInfo;
+import com.sunwin.visitorapp.utils.Constant;
+import com.sunwin.visitorapp.utils.LogUtil;
+import com.sunwin.visitorapp.utils.ToastUtils;
+import com.sunwin.visitorapp.view.FaceDetecterView;
+
+import org.jetbrains.annotations.NotNull;
+
+public class IdcardRegFragment extends BaseFragment implements IdCardReadCallback, FaceDetecterView.Listener {
+    private LinearLayout mLlIdCardReg;
+
+    private FaceDetecterView mFaceDetecterView;
+    private IDCardReaderUtil idCardReaderUtil;
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+
+        View view = inflater.inflate(R.layout.fragment_id_card_reg, container, false);
+
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        initView(view);
+        idCardReaderUtil = new IDCardReaderUtil(mContext, this);
+        idCardReaderUtil.startRead();
+        mFaceDetecterView.config(mContext, this);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        LogUtil.e(TAG, "=======onResume = " );
+        mFaceDetecterView.onResume();
+    }
+
+    @Override
+    public void onPause() {
+        super.onPause();
+        LogUtil.e(TAG, "=======onPause = " );
+        idCardReaderUtil.stopRead();
+        mFaceDetecterView.onDestroy();
+    }
+
+    private void initView(View view) {
+        mLlIdCardReg = view.findViewById(R.id.ll_id_card_reg);
+        mFaceDetecterView = view.findViewById(R.id.faceDetecterView);
+    }
+
+    @Override
+    public void onIdNumRead(String idNum) {
+        LogUtil.e(TAG, "idNum = " + idNum);
+        //读取身份证后显示人脸扫描框
+        if (isAdded())
+            mContext.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    mLlIdCardReg.setVisibility(View.GONE);
+                    ToastUtils.showToast(getString(R.string.have_readed_id_card));
+                    mFaceDetecterView.setVisibility(View.VISIBLE);
+                }
+            });
+    }
+
+    /**
+     * ------------------FaceDetecterView.Listener 开始------------------------------
+     */
+
+    @Override
+    public void detectedFace() {
+
+    }
+
+    @Override
+    public void detectedUser(OpenDoorByFaceNetResultInfo info) {
+        BaseApplication.getSystemTTS().playText("识别成功");
+        Intent intent = new Intent(mContext, VisitorRegisterAc.class);
+        intent.putExtra(Constant.IIntentValue.CURRENTFACEPATH,info.getCurrentFace());
+        startActivity(intent);
+    }
+
+    @Override
+    public void detecterFail(String st) {
+        BaseApplication.getSystemTTS().playText("识别失败");
+    }
+
+    @Override
+    public void takePic(CameraPreviewData data) {
+
+    }
+
+    /** ------------------FaceDetecterView.Listener 结束------------------------------  */
+}

+ 116 - 0
app/src/main/java/com/sunwin/visitorapp/fragment/NoCardRegFragment.java

@@ -0,0 +1,116 @@
+package com.sunwin.visitorapp.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.sunwin.visitorapp.BaseApplication;
+import com.sunwin.visitorapp.BaseFragment;
+import com.sunwin.visitorapp.R;
+import com.sunwin.visitorapp.activity.VisitorRegisterAc;
+import com.sunwin.visitorapp.face.CameraPreviewData;
+import com.sunwin.visitorapp.model.OpenDoorByFaceNetResultInfo;
+import com.sunwin.visitorapp.utils.Constant;
+import com.sunwin.visitorapp.utils.FileUtil;
+import com.sunwin.visitorapp.utils.LogUtil;
+import com.sunwin.visitorapp.utils.ToastUtils;
+import com.sunwin.visitorapp.view.FaceDetecterView;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.io.File;
+import java.io.IOException;
+
+public class NoCardRegFragment extends BaseFragment implements FaceDetecterView.Listener {
+    private FaceDetecterView mFaceDetecterView;
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+
+        View view = inflater.inflate(R.layout.fragment_no_card_reg, container, false);
+
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        initView(view);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mFaceDetecterView.onResume();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mFaceDetecterView.onDestroy();
+    }
+
+    private void initView(View view) {
+        mFaceDetecterView = view.findViewById(R.id.faceDetecterView);
+        mFaceDetecterView.config(mContext, this);
+        mFaceDetecterView.needTakePic = true;
+        BaseApplication.getSystemTTS().playText("请看摄像头");
+
+    }
+
+
+    /**
+     * ------------------FaceDetecterView.Listener 开始------------------------------
+     */
+    @Override
+    public void detectedFace() {
+
+    }
+
+    @Override
+    public void detectedUser(OpenDoorByFaceNetResultInfo openDoorByFaceNetResultInfo) {
+
+    }
+
+    @Override
+    public void detecterFail(String st) {
+
+    }
+
+    @Override
+    public void takePic(CameraPreviewData data) {
+        String saveFilePath = Constant.RecognitionDir + "face_" + System.currentTimeMillis() + ".jpg";
+        LogUtil.e(TAG, "takePicPath = " + saveFilePath);
+        File saveFile = new File(saveFilePath);
+        saveFile.deleteOnExit();
+        try {
+            if (saveFile.createNewFile()) {
+                FileUtil.saveFile(data.nv21Data, data.width, data.height, data.rotation, saveFilePath);
+                ToastUtils.showToast("人脸采集成功");
+                new Handler().postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        Intent intent = new Intent(mContext, VisitorRegisterAc.class);
+                        intent.putExtra(Constant.IIntentValue.CURRENTFACEPATH, saveFile);
+                        startActivity(intent);
+                    }
+                }, 500);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+    /**
+     * ------------------FaceDetecterView.Listener 结束------------------------------
+     */
+}

+ 116 - 0
app/src/main/java/com/sunwin/visitorapp/fragment/RegTypeFragment.java

@@ -0,0 +1,116 @@
+package com.sunwin.visitorapp.fragment;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import com.sunwin.visitorapp.BaseFragment;
+import com.sunwin.visitorapp.R;
+import com.sunwin.visitorapp.adapter.VisitorRegAdapter;
+import com.sunwin.visitorapp.utils.Constant;
+import com.sunwin.visitorapp.utils.LogUtil;
+import com.sunwin.visitorapp.utils.ToastUtils;
+import com.sunwin.visitorapp.view.MyGridView;
+
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RegTypeFragment extends BaseFragment implements AdapterView.OnItemClickListener {
+
+    private List<String> itemList;
+    private List<Integer> iconList;
+    private boolean isLoginUser;
+    private MyGridView mGridview;
+
+    public RegTypeFragment(Listener mListener) {
+        this.mListener = mListener;
+    }
+
+    @Nullable
+    @Override
+    public View onCreateView(@NonNull @NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+        LogUtil.e(TAG, "-----------------onCreateView-----------------");
+        View view = inflater.inflate(R.layout.fragment_reg_type, container, false);
+
+
+        return view;
+    }
+
+    @Override
+    public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+        LogUtil.e(TAG, "-----------------onViewCreated-----------------");
+        isLoginUser = mContext.getIntent().getBooleanExtra(Constant.IIntentValue.ISLOGINUSER, false);
+        initData();
+        initView(view);
+    }
+
+    private void initData() {
+        itemList = new ArrayList<>();
+        iconList = new ArrayList<>();
+        itemList.add("身份证");
+        itemList.add("无证登记");
+        iconList.add(R.mipmap.visitor_reg_default);
+        iconList.add(R.mipmap.visitor_reg_default);
+        if (isLoginUser) {
+            itemList.add("驾驶证");
+            iconList.add(R.mipmap.visitor_reg_default);
+        }
+    }
+
+    private void initView(View view) {
+        mGridview = view.findViewById(R.id.gridview);
+        VisitorRegAdapter adapter = new VisitorRegAdapter(itemList, iconList);
+        mGridview.setAdapter(adapter);
+
+        mGridview.setOnItemClickListener(this);
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
+        if (adapterView.getId() == R.id.gridview) {
+            switch (i) {
+                case 0:
+                    if (mListener != null) {
+                        mListener.showIdCardReg();
+                    }
+//                    replaceFragment(new IdcardRegFragment());
+                    break;
+                case 1:
+                    if (mListener != null) {
+                        mListener.showNoCardReg();
+                    }
+
+//                    startActivity(new Intent(this, NoCardRegActivity.class));
+                    break;
+                case 2:
+                    ToastUtils.showToast("开发中...");
+                    break;
+            }
+        } else {
+
+        }
+    }
+
+    private Listener mListener;
+
+    public interface Listener {
+
+        void showIdCardReg();
+
+        void showNoCardReg();
+    }
+
+//    public void setListener(Listener listener) {
+//        mListener = listener;
+//    }
+
+
+}

+ 13 - 0
app/src/main/java/com/sunwin/visitorapp/net/ApiService.java

@@ -0,0 +1,13 @@
+package com.sunwin.visitorapp.net;
+
+import okhttp3.RequestBody;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.Headers;
+import retrofit2.http.POST;
+
+public interface ApiService {
+    @POST("uploadRecord")
+    @Headers({"Content-Type: application/json", "Accept: application/json"})
+    Call<BaseRsult<String>> uploadRecord(@Body RequestBody body);
+}

+ 31 - 0
app/src/main/java/com/sunwin/visitorapp/net/BaseRsult.java

@@ -0,0 +1,31 @@
+package com.sunwin.visitorapp.net;
+
+public class BaseRsult<T> {
+    private int code;
+    private String message;
+    private T result;
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public T getResult() {
+        return result;
+    }
+
+    public void setResult(T result) {
+        this.result = result;
+    }
+}

+ 118 - 0
app/src/main/java/com/sunwin/visitorapp/net/RetrofitUtil.java

@@ -0,0 +1,118 @@
+package com.sunwin.visitorapp.net;
+
+import android.text.TextUtils;
+
+
+import com.google.gson.Gson;
+import com.sunwin.visitorapp.BaseApplication;
+import com.sunwin.visitorapp.utils.Constant;
+
+import java.io.File;
+import java.lang.reflect.Type;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import okhttp3.Cache;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.RequestBody;
+import okhttp3.logging.HttpLoggingInterceptor;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+import static okhttp3.RequestBody.create;
+
+public class RetrofitUtil {
+    private static final String TAG = "RetrofitUtil";
+
+    private RetrofitUtil() {
+
+    }
+
+    private static ApiService apiService;
+
+    public static ApiService getApiService() {
+        if (apiService == null) {
+            synchronized (RetrofitUtil.class) {
+                if (apiService == null) {
+                    initRetrofit();
+                }
+            }
+        }
+        return apiService;
+    }
+
+    public static void initRetrofit() {
+        try {
+            Retrofit retrofit = new Retrofit.Builder()
+                    .client(initClient())
+                    .addConverterFactory(GsonConverterFactory.create())
+
+//                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
+                    .baseUrl(Constant.getSERVER())
+                    .build();
+            apiService = retrofit.create(ApiService.class);
+        } catch (IllegalArgumentException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    public static OkHttpClient initClient() {
+        HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
+        logging.setLevel(HttpLoggingInterceptor.Level.BODY);
+
+        // 指定缓存路径,缓存大小100Mb
+        Cache cache = new Cache(new File(BaseApplication.getInstance().getCacheDir(), "HttpCache"),
+                1024 * 1024 * 100);
+        OkHttpClient okHttpClient = new OkHttpClient.Builder().cache(cache)
+                .retryOnConnectionFailure(true)
+                .addInterceptor(logging)//logInterceptor
+//                .addNetworkInterceptor(sRewriteCacheControlInterceptor)
+                .connectTimeout(90, TimeUnit.SECONDS)////建立连接的超时时间
+                .writeTimeout(120, TimeUnit.SECONDS)
+                .readTimeout(120, TimeUnit.SECONDS)//传递数据的超时时间
+                .build();
+        return okHttpClient;
+    }
+
+
+
+    public static Map<String, RequestBody> getUploadPicMap(List<String> files) {
+        Map<String, RequestBody> bodyMap = new LinkedHashMap<>();
+        for (int i = 0; i < files.size(); i++) {
+            File file = new File(files.get(i));
+            bodyMap.put("picture\"; filename=\"" + file.getName(), create(MediaType.parse("image/*"), file));
+        }
+        return bodyMap;
+
+    }
+
+
+
+    public static Map<String, RequestBody> getUploadPic(String path) {
+        Map<String, RequestBody> bodyMap = new LinkedHashMap<>();
+        if (!TextUtils.isEmpty(path)) {
+            File file = new File(path);
+            bodyMap.put("picture\"; filename=\"" + file.getName(), create(MediaType.parse("image/*"), file));
+        }
+        return bodyMap;
+
+    }
+
+
+    public static String bean2Json(Object object) {
+        return new Gson().toJson(object);
+    }
+
+    public static <T> T fromJson(String json, Class<T> classOfT) {
+        return new Gson().fromJson(json, classOfT);
+    }
+
+    public static <T> T fromJson(String json, Type typeOfT) {
+        return new Gson().fromJson(json, typeOfT);
+    }
+
+}

+ 6 - 5
app/src/main/java/com/sunwin/visitorapp/utils/Constant.java

@@ -6,7 +6,7 @@ public class Constant {
     final public static int rotate = SharePrefenceUtils.getInt("cameraRotate", 0);
     final public static boolean isFrontCamera = SharePrefenceUtils.getBoolean("isFrontCamera", false);
     final public static boolean isSufaRotate = SharePrefenceUtils.getBoolean("sufaRotate", false);
-    public static int  COMPARSION_VALUE = SharePrefenceUtils.getInt("comparsion_value", Constant.NumerValue.defaultComparsionValue);
+    public static int COMPARSION_VALUE = SharePrefenceUtils.getInt("comparsion_value", Constant.NumerValue.defaultComparsionValue);
     public static int COMPARSION_FREQUENCY = SharePrefenceUtils.getInt("comparsion_frequency_value", Constant.NumerValue.defaultComparsionFrequency);
     public int AVOID_SAME_PEOPLE_VALUE = SharePrefenceUtils.getInt("avoid_same_people_value", Constant.NumerValue.defaultAvoidSamePeopleValue);
     public int MOUDLE_UPDATE_VALUE = SharePrefenceUtils.getInt("mould_update_value", Constant.NumerValue.defaultMoudleUpdateValue);
@@ -44,12 +44,13 @@ public class Constant {
 
     public interface IIntentValue {
         String CURRENTFACEPATH = "currentFacePath";
+        String ISLOGINUSER = "isLoginUser";
     }
 
     public interface NumerValue {
 
-      int VID = 1024;    //IDR VID
-      int PID = 50010;     //IDR PID
+        int VID = 1024;    //IDR VID
+        int PID = 50010;     //IDR PID
 
 
         int FRABS_TYPE = 1;
@@ -67,9 +68,9 @@ public class Constant {
         int defaultComparsionFrequency = 3;
         int defaultFaceQuality = 60;
         int defaultIdCompareValue = 55;
-       int defaultMinFaceValue = 100;
+        int defaultMinFaceValue = 100;
 
 
-      int AppType = 3;//0pad 1手持2海清3酒店人证
+        int AppType = 3;//0pad 1手持2海清3酒店人证
     }
 }

+ 1 - 11
app/src/main/res/layout/activity_no_card_reg.xml

@@ -7,21 +7,11 @@
     <include layout="@layout/title_layout" />
 
     <FrameLayout
+        android:id="@+id/fl_content"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_margin="100dp"
         android:background="@color/color_efeeee">
-
-        <include
-            android:id="@+id/faceDetecterView"
-            layout="@layout/view_face_detecter"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:layout_marginLeft="150dp"
-            android:layout_marginTop="50dp"
-            android:layout_marginRight="150dp"
-            android:layout_marginBottom="50dp" />
     </FrameLayout>
 
-
 </FrameLayout>

+ 21 - 48
app/src/main/res/layout/activity_visitor_reg.xml

@@ -10,7 +10,10 @@
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_margin="120dp"
+        android:layout_marginLeft="80dp"
+        android:layout_marginRight="80dp"
+        android:layout_marginTop="50dp"
+        android:layout_marginBottom="40dp"
         android:layout_gravity="center_horizontal"
         android:orientation="horizontal">
         <LinearLayout
@@ -46,64 +49,34 @@
                 android:textSize="@dimen/sp_20" />
         </LinearLayout>
 
-        <LinearLayout
+        <FrameLayout
+            android:id="@+id/fl_content"
             android:layout_width="0dp"
             android:layout_height="match_parent"
-            android:layout_marginLeft="50dp"
+            android:layout_marginLeft="40dp"
             android:layout_weight="2"
             android:padding="50dp"
             android:background="@color/color_efeeee"
             android:orientation="horizontal">
 
-            <LinearLayout
-                android:id="@+id/ll_card_reg"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:orientation="vertical">
-
-                <ImageView
-                    android:layout_width="180dp"
-                    android:layout_height="90dp"
-                    android:scaleType="fitXY"
-                    android:src="@mipmap/ic_launcher" />
 
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_horizontal"
-                    android:text="身份证" />
-            </LinearLayout>
 
-            <LinearLayout
-                android:id="@+id/ll_no_card_reg"
-                android:layout_marginLeft="50dp"
-                android:layout_marginRight="50dp"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:orientation="vertical">
 
-                <ImageView
-                    android:layout_width="180dp"
-                    android:layout_height="90dp"
-                    android:scaleType="fitXY"
-                    android:src="@mipmap/ic_launcher" />
-
-                <TextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_horizontal"
-                    android:text="无证登记" />
-            </LinearLayout>
-
-            <LinearLayout
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_weight="1"
-                android:orientation="vertical" />
-        </LinearLayout>
+        </FrameLayout>
 
 
     </LinearLayout>
+
+    <com.sunwin.visitorapp.view.MyGridView
+        android:id="@+id/gridviewBottom"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="120dp"
+        android:layout_marginRight="120dp"
+        android:horizontalSpacing="60dp"
+        android:numColumns="5"
+        android:overScrollMode="never"
+        android:paddingBottom="10dp"
+        android:scrollbars="none"
+        android:verticalSpacing="5dp" />
 </LinearLayout>

+ 10 - 16
app/src/main/res/layout/adapter_card.xml

@@ -1,27 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:gravity="center"
     android:orientation="vertical">
 
-        <ImageView
-            android:id="@+id/item_icon"
-            android:layout_width="100dp"
-            android:layout_height="100dp"
-            android:scaleType="fitXY"
-            android:src="@mipmap/ic_launcher" />
+    <ImageView
+        android:id="@+id/item_icon"
+        style="@style/Home_Menu_Item_Icon"
+        android:background="@drawable/menu_orange"
+        app:srcCompat="@drawable/ui_vector_record" />
 
 
-
-        <TextView
-            android:id="@+id/item_desc"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="10dp"
-            android:layout_gravity="center_horizontal"
-            android:text="访客记录"
-            android:textColor="@color/color_333333"
-            android:textSize="@dimen/sp_20" />
+    <TextView
+        android:id="@+id/item_desc"
+        style="@style/Home_Menu_Item_Label"
+        android:text="访客记录" />/>
 
 </LinearLayout>

+ 27 - 0
app/src/main/res/layout/adapter_visitor_reg.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/item_icon"
+        android:layout_width="match_parent"
+        android:layout_height="80dp"
+        android:scaleType="fitXY"
+        android:src="@mipmap/visitor_reg_default" />
+
+
+
+    <TextView
+        android:id="@+id/item_desc"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        android:layout_gravity="center_horizontal"
+        android:text="身份证"
+        android:textColor="@color/color_333333"
+        android:textSize="@dimen/sp_20" />
+
+</LinearLayout>

+ 37 - 0
app/src/main/res/layout/fragment_id_card_reg.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <LinearLayout
+        android:id="@+id/ll_id_card_reg"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+
+        android:layout_margin="50dp"
+        android:orientation="vertical">
+
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:scaleType="fitXY"
+            android:src="@mipmap/id_card" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal"
+            android:layout_marginTop="10dp"
+            android:text="请刷身份证"
+            android:textColor="@color/color_333333"
+            android:textSize="@dimen/sp_25" />
+    </LinearLayout>
+
+    <include
+        android:id="@+id/faceDetecterView"
+        layout="@layout/view_face_detecter"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:visibility="gone" />
+</FrameLayout>

+ 13 - 0
app/src/main/res/layout/fragment_no_card_reg.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_efeeee">
+
+    <include
+        android:id="@+id/faceDetecterView"
+        layout="@layout/view_face_detecter"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</FrameLayout>

+ 16 - 0
app/src/main/res/layout/fragment_reg_type.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.sunwin.visitorapp.view.MyGridView
+        android:id="@+id/gridview"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:horizontalSpacing="20dp"
+        android:numColumns="3"
+        android:overScrollMode="never"
+        android:paddingBottom="10dp"
+        android:scrollbars="none"
+        android:verticalSpacing="5dp" />
+</FrameLayout>

BIN
app/src/main/res/mipmap-xhdpi/visitor_reg_default.png