一个简单的智能停车APP——抽屉式侧边栏

一个简单的智能停车APP

功能介绍

先展示效果图:


侧边栏由MaterialDesign(原质化设计)框架设计而成。
由DrawerLayout+NavigationView组成
需要导入的包如下:
其中circleimageview是将图片放入圆型容器之中

   implementation 'com.google.android.material:material:1.1.0-alpha09'
    implementation 'com.getbase:floatingactionbutton:1.10.1'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'de.hdodenhof:circleimageview:2.1.0'

代码详解

布局文件代码如下:
app:headerLayout:代表头部文件内容
app:menu:代表下面菜单内容
android:layout_gravity=“left” 为侧边栏所在位置以及滑动方向

 <com.google.android.material.navigation.NavigationView
        android:id="@+id/InformationManage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:headerLayout="@layout/information_head_item"
        app:menu="@menu/setting_menu"
        android:layout_gravity="left"
        />

其中app:headerLayout代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:circleimageview="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<de.hdodenhof.circleimageview.CircleImageView
    android:id="@+id/HeadImage"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@drawable/user_bule"
    android:layout_gravity="center"
    circleimageview:civ_border_color="@android:color/holo_red_light"
    circleimageview:civ_border_overlay="false"
    circleimageview:civ_border_width="2dp"
    circleimageview:civ_fill_color="@android:color/holo_blue_light"
    />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center"
        android:layout_margin="@dimen/Small">

        <TextView
            android:id="@+id/HeadUserID"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="智能停车账号:"
            android:singleLine="true"
            android:textSize="@dimen/text_Medium"
            />
        <TextView
            android:id="@+id/Information_UserName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登陆账号"
            android:singleLine="true"
            android:textSize="@dimen/text_Medium"
            />
    </LinearLayout>
</LinearLayout>

app:menu代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">

  <item
      android:id="@+id/Personal"
      android:title="个人信息"
      android:icon="@drawable/user"/>
    <item
        android:id="@+id/Pay"
        android:title="支付管理"
        android:icon="@drawable/pay1"/>
    <item
        android:id="@+id/Car"
        android:title="车辆管理"
        android:icon="@drawable/cars"/>
    <item
        android:id="@+id/Collection"
        android:title="共享车位"
        android:icon="@drawable/shared"/>
    <item
        android:id="@+id/File"
        android:title="提前预定"
        android:icon="@drawable/booking"/>
    <item
        android:id="@+id/OrderManagement"
        android:title="订单管理"
        android:icon="@drawable/order"/>
</group>
   <item android:title="Setting">
       <menu >
           <item
               android:id="@+id/Setting"
               android:title="设置"
               android:icon="@drawable/setting1"/>
           <item
                 android:id="@+id/Version"
                 android:icon="@drawable/version"
                 android:title="版本信息"/>
       </menu>
   </item>
</menu>

在侧边栏我写了三个功能:个人信息,提前预定,共享车位,订单管理
一:个人信息

XML布局文件代码如下:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#E0E0E0"
    android:orientation="vertical"
    >
     <!--标题栏-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:orientation="horizontal"
        android:paddingLeft="5dp"
        android:paddingBottom="20dp"
        android:paddingTop="10dp"
        android:background="#fff"
       >

        <ImageView
            android:id="@+id/ToSettingInformationGoBack"
            android:layout_width="20dp"
            android:layout_height="30dp"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="2dp"
            android:scaleType="fitCenter"
            android:src="@drawable/goback1" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="账号管理"
            android:textSize="20sp"
            android:textColor="#000"
           android:layout_marginLeft="110dp"
            android:layout_marginTop="5dp"
            />
    </LinearLayout>
<!--信息栏-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingTop="20dp">
        <!--头像-->
        <LinearLayout
            android:id="@+id/LayoutIcons"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:orientation="horizontal"
            android:paddingLeft="20dp"
            android:background="#fff">
            <TextView
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="头像"
                android:textSize="15sp"
                android:layout_marginTop="10dp"
                android:textColor="#000"/>
            <ImageView
                android:id="@+id/SettingIcons"
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:src="@drawable/icons"
                android:scaleType="fitCenter"
                android:layout_marginTop="5dp"
                android:layout_marginRight="10dp"/>
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:src="@drawable/right"
                android:scaleType="fitCenter"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"/>

        </LinearLayout>
        <!--昵称-->
        <LinearLayout
            android:id="@+id/LayoutName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="20dp"
            android:background="#fff">
            <TextView
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="昵称"
                android:textSize="15sp"
                android:layout_marginTop="10dp"
                android:textColor="#000"/>
            <TextView
                android:id="@+id/SettingName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="FranzLiszt"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:textColor="#000" />
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:src="@drawable/right"
                android:scaleType="fitCenter"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"/>

        </LinearLayout>
        <!--性别-->
        <LinearLayout
            android:id="@+id/LayoutSex"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="20dp"
            android:background="#fff">
            <TextView
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="性别"
                android:textSize="15sp"
                android:layout_marginTop="10dp"
                android:textColor="#000"/>

            <TextView
                android:id="@+id/SettingSex"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:text="男"
                android:textColor="#000"
                android:background="#fff"/>
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:src="@drawable/right"
                android:scaleType="fitCenter"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"/>

        </LinearLayout>
        <!--等级-->
        <LinearLayout
            android:id="@+id/LayoutLevel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="20dp"
            android:background="#fff">
            <TextView
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="等级"
                android:textSize="15sp"
                android:layout_marginTop="10dp"
                android:textColor="#000"/>
            <TextView
                android:id="@+id/SettingLevel"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:text="铜牌会员"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:textColor="#000"
                android:background="#fff"/>
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:src="@drawable/right"
                android:scaleType="fitCenter"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"/>

        </LinearLayout>
        <!--手机号码-->
        <LinearLayout
            android:id="@+id/LayoutPhoneNumber"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:paddingLeft="20dp"
            android:background="#fff">
            <TextView
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="手机号码"
                android:textSize="15sp"
                android:layout_marginTop="10dp"
                android:textColor="#000"/>
            <TextView
                android:id="@+id/SettingPhoneNumber"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:text="去绑定"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:textColor="#000"
                android:background="#fff"/>
            <ImageView
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:src="@drawable/right"
                android:scaleType="fitCenter"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"/>

        </LinearLayout>
        
    </LinearLayout>
    <Button
        android:id="@+id/Exit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出登陆"
        android:background="#fff"
        android:textColor="#ff0000"
        android:layout_marginTop="20dp"/>
</LinearLayout>

JAVA代码如下:

public class SettingInformation extends AppCompatActivity {
    private LinearLayout LayoutImage,LayoutSex;
    private PopupWindow popupWindow;
    private TextView SettingName,SettingSex,SettingPhoneNumber,SettingLevel;
    private View view = null;
    private View viewSex = null;
    private Button ToCamera,ToPhoto,ToExit,Exit;
    private static int REQUEST_CAMERA       = 1;
    private static int REQUEST_CHOOSE_PHOTO = 2;
    private String PhotoAddress;
    private ImageView SettingIcons,SettingGoBack;
    private Bitmap bitmap;
    private static final String[] sPermissonVal = {Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE};
    private static final int PERMISSION_CAMERA_REQUEST_CODE = 3;
    Dao dao = new Dao( SettingInformation.this );



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_setting_information );
        InitView();
        ShowPopupWindows();
        UpdateLayout();
        Listener();
        //GetPhoto();
        //ShowPopupWindows_Sex();

    }
    /****************初始化界面****************/
    private void InitView() {
        LayoutImage = findViewById( R.id.LayoutIcons );
        LayoutSex = findViewById( R.id.LayoutSex );
        Exit = findViewById( R.id.Exit );
        SettingIcons = findViewById( R.id.SettingIcons );
        //CameraActivity.setClipRatio(1, 1);
        SettingName = findViewById( R.id.SettingName );
        SettingPhoneNumber = findViewById( R.id.SettingPhoneNumber );
        SettingSex = findViewById( R.id.SettingSex );
        SettingGoBack = findViewById( R.id.ToSettingInformationGoBack );
        SettingLevel = findViewById( R.id.SettingLevel );
        PhotoAddress = Environment.getExternalStorageDirectory().getPath();
        //指定路径和获取图片的名称
        PhotoAddress = PhotoAddress+"/"+"Image.png";
    }
    /****************根据注册填写的信息改变此布局内容,传过来一个boolean值进行判断****************/
    private void UpdateLayout(){
        if (Login.JudgeLoginStatic == true) {
           Account account = dao.QueryInformation( Login.Login_Account );
            String GetSex = account.getSex();
            String GetPhoneNumber = account.getPhoneNumber();
            SettingName.setText( Login.Login_Account );
            SettingPhoneNumber.setText( GetPhoneNumber );
            SettingSex.setText( GetSex );
        }
    }
    /****************用于点击退出登陆后,清理布局****************/
    private void DeleteLayout(){
        SettingIcons.setImageResource( R.drawable.icons );
        SettingName.setText( "" );
        SettingSex.setText( "" );
        SettingPhoneNumber.setText( "" );
        SettingLevel.setText( "" );
        Exit.setText( "立即登陆" );
       Intent intent = new Intent( SettingInformation.this, Login.class );
       startActivity( intent );
    }
    //申请权限
    /************需要动态申请权限************/
    private void requestPermission() {
        // Android6.0开始, 即当API大于等于 23 时,才动态申请权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            this.requestPermissions(sPermissonVal, PERMISSION_CAMERA_REQUEST_CODE);
        }
    }

    /****************初始化PopupWindows****************/
    private void ShowPopupWindows() {
        //获取布局
        view = LayoutInflater.from( SettingInformation.this).inflate( R.layout.popup_image,null,false );
        ToCamera = view.findViewById( R.id.ToCamera ); //跳转相机
        ToPhoto = view.findViewById( R.id.ToPhoto );//跳转相册
        ToExit = view.findViewById( R.id.ToExit );//退出
        popupWindow = new PopupWindow( view, ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT );
        popupWindow.setFocusable( true ); //获取焦点
        popupWindow.setBackgroundDrawable( new BitmapDrawable(  ) );
        popupWindow.setOutsideTouchable( true ); //点击外面地方,取消
        popupWindow.setTouchable( true ); //允许点击
        popupWindow.setAnimationStyle( R.style.MyPopupWindow ); //设置动画
        ToExit.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupWindow.dismiss();
            }
        } );
        /****************打开相机监听事件****************/
        ToCamera.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //requestPermission();
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.addCategory(Intent.CATEGORY_DEFAULT);
                startActivityForResult(intent, 2);
            }
        } );
        /****************打开相册监听事件****************/
        ToPhoto.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openGallery();
            }
        } );
    }
    /****************对返回键进行监听,如果按下popupWindow消失****************/
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK){
            if (popupWindow != null && popupWindow.isShowing()){
                popupWindow.dismiss();
                return true;
            }
        }
        return false;
    }
    /****************显示PopupWindows****************/
    private void ShowPopupWindowsFromButtom(){
        popupWindow.showAtLocation( view, Gravity.BOTTOM,0,0 );
    }
    /****************打开相机****************/
    private void OpenCamera(){
//        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//        intent.addCategory(Intent.CATEGORY_DEFAULT);
//
//        // 打开照相机,设置请求码
//        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
//        startActivityForResult(intent, 2);


//        try {
//            Intent intent = new Intent();
//            intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//            File file = FileManager.createFileIfNeed("filepath.png");
//            Uri uri;
//            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
//                uri = Uri.fromFile(file);
//            } else {
//                uri = FileProvider.getUriForFile(this, "link.android.file.provider", file);
//            }
//            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
//            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
//            startActivityForResult(intent, 1);
//        }catch (IOException e){
//            e.printStackTrace();
//        }

    }
    /****************打卡相册****************/
    private void openGallery() {
        Intent picture = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(picture, 2);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //获得相册、相机返回的结果,并显示
        if (CameraActivity.LISTENING) {
            Log.e("TAG", "返回的Uri结果:" + CameraActivity.IMG_URI);
            Log.e("TAG", "返回的File结果:" + CameraActivity.IMG_File.getPath());
            CameraActivity.LISTENING = false;   //关闭获取结果
            SettingIcons.setImageURI(CameraActivity.IMG_URI);  //显示图片到控件
        }

    }
    /********************************/
        @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult( requestCode, resultCode, data );
            //判断是否返回数据
            if (resultCode == RESULT_OK) {
                //判断返回的类型是否是我们所需
                if (requestCode == 1) {
                    String state = Environment.getExternalStorageState();
                    if (!state.equals( Environment.MEDIA_MOUNTED ))
                        return;
                    Tiny.FileCompressOptions options = new Tiny.FileCompressOptions();
                    Tiny.getInstance().source( FileManager.readpic() ).asFile().withOptions( options ).compress( new FileWithBitmapCallback() {

                        @Override
                        public void callback(boolean isSuccess, Bitmap bitmap, String outfile, Throwable t) {

                        }
                    } );
                } else if (requestCode == 2 && resultCode == Activity.RESULT_OK && null != data) {
//                    try {
//                        Uri selectedImage = data.getData();
//                        Tiny.FileCompressOptions options = new Tiny.FileCompressOptions();
//                        Tiny.getInstance().source( selectedImage ).asFile().withOptions( options ).compress( new FileWithBitmapCallback() {
//                            @Override
//                            public void callback(boolean isSuccess, Bitmap bitmap, String outfile, Throwable t) {
//                                SettingIcons.setImageBitmap( bitmap );
//                            }
//                        } );
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                    }
                    Bundle bundle = data.getExtras();
                    Bitmap bitmap = (Bitmap) bundle.get("data");
                    SettingIcons.setImageBitmap(bitmap);

                }
            }
        }

    private void getPicture() {
        //获取字符串
        SharedPreferences sPreferences = getSharedPreferences("Picture", Context.MODE_PRIVATE);
        String imageBase64 = sPreferences.getString("cameraImage", "");
        //把字符串解码成Bitmap对象
        byte[] byte64 = Base64.decode(imageBase64, 0);
        ByteArrayInputStream bais = new ByteArrayInputStream(byte64);
        Bitmap bitmap = BitmapFactory.decodeStream(bais);
        //显示图片
        SettingIcons.setImageBitmap(bitmap);
    }


        private void ToBitmap(){
            //把Bitmap转码成字符串
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bitmap.compress( Bitmap.CompressFormat.PNG, 50,baos);
            String imageBase64 = new String ( Base64.encode(baos.toByteArray(), 0));
            //把字符串存到SharedPreferences里面
            SharedPreferences prePicture = getSharedPreferences("Picture", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = prePicture.edit();
            editor.putString("cameraImage", imageBase64);
            editor.commit();


        }
            private void Listener () {
                OnClick onClick = new OnClick();
                LayoutImage.setOnClickListener( onClick );
                LayoutSex.setOnClickListener( onClick );
                Exit.setOnClickListener( onClick );
                SettingGoBack.setOnClickListener( onClick );
    }
    /**************内部类监听事件**************/
            class OnClick implements View.OnClickListener {
                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                        case R.id.LayoutIcons:
                            ShowPopupWindowsFromButtom();
                            break;
                        case R.id.Exit:
                            DeleteLayout();
                            break;
                        case R.id.ToSettingInformationGoBack:
                           Intent intent = new Intent( SettingInformation.this, Function.class);
                            startActivity( intent );
                            break;
                    }
                }
            }
        }

二:共享车位
步骤:1.选择共享车位类型2.填写相关信息3.审核



三:提前预定
效果图如下:
从右网左侧滑出现提前预定按钮

订单信息

弹出信息确认提示

四:订单管理
当确认订单时,便开始计时:
界面如下:

然后点击结束并缴费,弹出popwindows,订单信息

点击确定之后进入支付界面,依旧是弹出popwindows,界面如下

填写密码之后,点击支付,弹出通知,回执支付成功信息
介绍几个重要的功能
1.计时器
返回系统启动到现在的毫秒数,包含休眠时间。

SystemClock.elapsedRealtime()
 Handler handler_time = new Handler(  ){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage( msg );
                mHour.setText( msg.obj.toString() );
            }
        };
        new Timer(  ).scheduleAtFixedRate( new TimerTask() {
            @Override
            public void run() {
                int time = (int)((SystemClock.elapsedRealtime() - OrderInterface.this.CurrentTime) / 1000);
                GetTimeHour = new DecimalFormat("00").format(time / 3600);
                GetTimeMinute = new DecimalFormat("00").format(time % 3600 / 60);
                GetTimeSecond = new DecimalFormat("00").format(time % 60);
                String timeFormat = new String(GetTimeHour + ":" + GetTimeMinute + ":" + GetTimeSecond);
                Message msg = new Message();
                msg.obj = timeFormat;
                handler_time.sendMessage(msg);
            }
        },0,1000L );
    }

2.通知
Android8以上使用通知一定要创建渠道

 private void NotificationManagerMethod(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //创建通知渠道ID
            String channelId = "Park";
            //创建通知渠道名称
            String channelName = "路边秒停车";
            //创建通知渠道重要性
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(  channelId, channelName, importance );
        }
    }
    private void InitNotificationManager(){
        manager = (NotificationManager)getSystemService( NOTIFICATION_SERVICE );
        Notification builder = new NotificationCompat.Builder(this,"Park")
                 .setSmallIcon( R.drawable.stopicon_notfition )
                .setContentTitle( "支付结果" )
                .setContentText( "支付成功\n"+"停车时间:"+GetTimeHour+"小时"+GetTimeMinute+"分钟"+"\n"+"支付金额:"+PayTotalMoney+"元" )
                // 通知首次出现在通知栏,带上升动画效果的
                .setWhen( System.currentTimeMillis() )
                .setAutoCancel(true)
                .build();
        manager.notify( 0,builder);
    }
    private void createNotificationChannel(String channelId,String channelName,int importance){
        NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
        NotificationManager notificationManager = (NotificationManager) getSystemService(
                NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);
    }

该类整体代码如下:

package com.example.Order;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.BitmapDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.text.Layout;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;

import com.example.Imformation.Function;
import com.example.intelligentparking.R;
import com.mob.tools.utils.ResHelper;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class OrderInterface extends AppCompatActivity {

    private TextView mHour,mMinute,mSecond;
    private ImageView mOrderGoBack;
    private Button mToPay;
    private int CurrentMinute = 0,CurrentHour = 0,CurrentSecond = 0;
    private Handler handler;
    private Toast toastPayInformation;
    private PopupWindow DisplayPayInterface,InputPassWordInterface;
    private long CurrentTime;
    private String DEFAULT_TIME_FORMAT = "yyyy-MM-dd hh:mm:ss";
    public static final int ParkPrice = 5;
    private String GetTimeHour;
    private String GetTimeMinute;
    private String GetTimeSecond;
    private int PayTotalMoney = 0;
    /**以下为PopupWindow里面的控件*/
    private TextView Name,PhoneNumber,ParkedTime,EstimatePayMoney,ReallyPayMoney,OrderTime,OrderNumber;
    private Button Cancel,Confirm;
    private  View view,view_passWord;
    private Thread thread;
    private   NotificationManager manager;
    /**PopupWindow支付并且填写密码界面*/
    private ImageView GoBackPayInterface;
    private TextView PayMoney;
    private EditText PassWord_One,PassWord_Two,PassWord_Three,PassWord_Four,PassWord_Five,PassWord_Six;
    private Button ConfirmPay;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
       //requestWindowFeature( Window.FEATURE_CUSTOM_TITLE );
        setContentView( R.layout.activity_order_interface );
        //getWindow().setFeatureInt( Window.FEATURE_CUSTOM_TITLE,R.layout.order_titlebar );
        OrderInterface.this.CurrentTime = SystemClock.elapsedRealtime();
        InitView();
        Listener();
        DisplayPayInformation();
        DisplayInputPassWordAndPay();
        NotificationManagerMethod();
        Handler handler_time = new Handler(  ){
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage( msg );
                mHour.setText( msg.obj.toString() );
            }
        };
        new Timer(  ).scheduleAtFixedRate( new TimerTask() {
            @Override
            public void run() {
                /* 返回系统启动到现在的毫秒数,包含休眠时间。*/
                int time = (int)((SystemClock.elapsedRealtime() - OrderInterface.this.CurrentTime) / 1000);
                GetTimeHour = new DecimalFormat("00").format(time / 3600);
                GetTimeMinute = new DecimalFormat("00").format(time % 3600 / 60);
                GetTimeSecond = new DecimalFormat("00").format(time % 60);
                String timeFormat = new String(GetTimeHour + ":" + GetTimeMinute + ":" + GetTimeSecond);
                Message msg = new Message();
                msg.obj = timeFormat;
                handler_time.sendMessage(msg);
            }
        },0,1000L );
    }

    private void InitView(){
        mHour = findViewById( R.id.Time_Hour );
       /* mMinute = findViewById( R.id.Time_Minute );
        mSecond = findViewById( R.id.Time_Second );*/
        mOrderGoBack = findViewById( R.id. OrderBack);
        mToPay = findViewById( R.id.ToPay );
    }
    private void Listener(){
        OnClick onClick = new OnClick();
        mOrderGoBack.setOnClickListener( onClick );
        mToPay.setOnClickListener( onClick);
    }
    private void NotificationManagerMethod(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //创建通知渠道ID
            String channelId = "Park";
            //创建通知渠道名称
            String channelName = "路边秒停车";
            //创建通知渠道重要性
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(  channelId, channelName, importance );
        }
    }
    private void InitNotificationManager(){
        manager = (NotificationManager)getSystemService( NOTIFICATION_SERVICE );
        Notification builder = new NotificationCompat.Builder(this,"Park")
                 .setSmallIcon( R.drawable.stopicon_notfition )
                .setContentTitle( "支付结果" )
                .setContentText( "支付成功\n"+"停车时间:"+GetTimeHour+"小时"+GetTimeMinute+"分钟"+"\n"+"支付金额:"+PayTotalMoney+"元" )
                // 通知首次出现在通知栏,带上升动画效果的
                .setWhen( System.currentTimeMillis() )
                .setAutoCancel(true)
                .build();
        manager.notify( 0,builder);
    }
    private void createNotificationChannel(String channelId,String channelName,int importance){
        NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
        NotificationManager notificationManager = (NotificationManager) getSystemService(
                NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(channel);
    }
    private void DisplayInputPassWordAndPay(){
        view_passWord = LayoutInflater.from( OrderInterface.this ).inflate( R.layout.paysystem_interface,null,false );
        GoBackPayInterface = view_passWord.findViewById( R.id.GoBackPayInterface );
        PayMoney = view_passWord.findViewById( R.id.PayMoney );
        PassWord_One = view_passWord.findViewById( R.id.PassWord_one );
        PassWord_Two = view_passWord.findViewById( R.id.PassWord_two );
        PassWord_Three = view_passWord.findViewById( R.id.PassWord_three );
        PassWord_Four = view_passWord.findViewById( R.id.PassWord_four );
        PassWord_Five = view_passWord.findViewById( R.id.PassWord_five );
        PassWord_Six = view_passWord.findViewById( R.id.PassWord_six );
        ConfirmPay = view_passWord.findViewById( R.id.ConfirmPay );
        InputPassWordInterface = new PopupWindow( view_passWord,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT );
        InputPassWordInterface.setFocusable( true ); //获取焦点
        InputPassWordInterface.setBackgroundDrawable( new BitmapDrawable(  ) );
        InputPassWordInterface.setOutsideTouchable( true ); //点击外面地方,取消
        InputPassWordInterface.setTouchable( true ); //允许点击
        InputPassWordInterface.setAnimationStyle( R.style.MyPopupWindow ); //设置动画
        ConfirmPay.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputPassWordInterface.dismiss();
                InitNotificationManager();
            }
        } );
        GoBackPayInterface.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                InputPassWordInterface.dismiss();
            }
        } );
    }
    private void DisplayPayInformation(){
            view = LayoutInflater.from( OrderInterface.this ).inflate( R.layout.display_pay_information,null,false );
            Name = view.findViewById( R.id.DisplayPay_Name );
            PhoneNumber = view.findViewById( R.id.DisplayPay_PhoneNumber );
            ParkedTime = view.findViewById( R.id.DisplayPay_Time );
            EstimatePayMoney = view.findViewById( R.id.DisplayPay_EstimatePayMoney );
            ReallyPayMoney = view.findViewById( R.id.DisplayPay_ReallyPayMoney );
            OrderTime = view.findViewById( R.id.OrderTime );
            OrderNumber = view.findViewById( R.id.OrderNumber );
            Cancel = view.findViewById( R.id.CancelToPay );
            Confirm = view.findViewById( R.id.ConfirmToPay );
            DisplayPayInterface = new PopupWindow( view, ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT );
            DisplayPayInterface.setFocusable( true ); //获取焦点
            DisplayPayInterface.setBackgroundDrawable( new BitmapDrawable(  ) );
            DisplayPayInterface.setOutsideTouchable( true ); //点击外面地方,取消
            DisplayPayInterface.setTouchable( true ); //允许点击
            DisplayPayInterface.setAnimationStyle( R.style.MyPopupWindow ); //设置动画
        Cancel.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DisplayPayInterface.dismiss();
            }
        } );
        Confirm.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DisplayPayInterface.dismiss();
                DisplayPayPopWindowsForCenter();
            }
        } );
    }
    private void DisplayPayPopWindowsForCenter(){
        InputPassWordInterface.showAtLocation( view,Gravity.BOTTOM,100,50 );
    }
    private void DisplayPopWindowsForCenter(){
        Name.setText( "孙鹏" );
        PhoneNumber.setText( "17375527572" );
               int Hour = Integer.parseInt( GetTimeHour );
               int Minute = Integer.parseInt( GetTimeMinute );
               int Second = Integer.parseInt( GetTimeSecond );
               ParkedTime.setText( Hour+"小时"+Minute+"分钟"+Second+"秒" );
               /**
                * 停车收费标准如下:
                * 1.一小时单价5元
                * 2.大于半小时,不满一小时,归于一小时计
                * 3.小于半小时,不计收费*/
               if (Hour > 0 && Minute > 30){
                   PayTotalMoney = (Hour+1)*ParkPrice;
               }else if (Hour > 0 && Minute < 30){
                   PayTotalMoney = Hour*ParkPrice;
               }else {
                   PayTotalMoney = 0;
               }
        EstimatePayMoney.setText( PayTotalMoney+"元" );
        ReallyPayMoney.setText( PayTotalMoney+"元" );
        SimpleDateFormat format = new SimpleDateFormat( DEFAULT_TIME_FORMAT );
        String Time = format.format( Calendar.getInstance().getTime() );
        OrderTime.setText( Time );
        Random random = new Random(  );
        Long OrderNumber_Long = 0L;
        do {
          OrderNumber_Long = random.nextLong();
        }while (OrderNumber_Long < 0);
        OrderNumber.setText( OrderNumber_Long+"" );
        DisplayPayInterface.showAtLocation( view,Gravity.CENTER,0,0 );
    }
    class OnClick implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.OrderBack:
                    startActivity( new Intent( OrderInterface.this, Function.class ) );
                    break;
                case R.id.ToPay:
                    DisplayPopWindowsForCenter();
                    break;
            }
        }
    }
}

总结

实践出真知

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FranzLiszt1847

嘟嘟嘟嘟嘟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值