Android支付宝微信银联等底部弹窗dialog(源码分析+例子)

Android支付宝微信银联等底部弹窗dialog(源码分析+例子)

本博文做技术分享存档使用,涉及技术点包含动画,自定义控件,三方支付SDK等,本文相对简单直接贴相关代码,有不懂的请留言,博主看到会及时解答,谢谢理解.本文源码下载
微信支付采坑的请看这篇博文微信支付快速三步接入请点这里
对自定义底部弹窗不明白的请看这篇博文Android自定义底部弹出窗-dialog(2种实现分析+源码)

文章目录

  • Android支付宝微信银联等底部弹窗dialog(源码分析+例子)
    • 一 MainActivity核心代码
    • 二 activity_main.xml 布局核心代码
    • 三 自定义view核心代码
    • 四 自定义view,dialog_pay_type.xml布局代码
    • 五 相关styles.xml核心代码
    • 六 相关colors.xml核心代码
    • 七 动画进出核心代码
      • 进入动画dialog_bottom_enter.xml
      • 退出动画dialog_bottom_exit.xml
    • 八 本文源码下载
    • 九 尾言

Android支付宝微信银联等底部弹窗dialog(源码分析+例子)_第1张图片

一 MainActivity核心代码

package com.kx.bottomdialogzhifubaowechat;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private ImageView mIvWeichatSelect;
    private ImageView mIvAliSelect;

    private static final int PAY_TYPE_WECHAT = 0;  //微信支付,默认支付方式
    private static final int PAY_TYPE_ALIBABA = 1;  //支付宝支付
    private int payType = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bt).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                pay();
            }
        });
    }

    private void pay() {
        View dialogView = getLayoutInflater().inflate(R.layout.dialog_pay_type, null);
        //微信支付的选择
        mIvWeichatSelect = dialogView.findViewById(R.id.iv_buy_weichat_select);
        //支付宝的选择
        mIvAliSelect = dialogView.findViewById(R.id.iv_buy_alipay_select);

        PayBottomDialog dialog = new PayBottomDialog(MainActivity.this, dialogView, new int[]{R.id.ll_pay_weichat, R.id.ll_pay_ali, R.id.tv_confirm, R.id.tv_cancel});
        dialog.bottmShow();
        dialog.setOnBottomItemClickListener(new PayBottomDialog.OnBottomItemClickListener() {
            @Override
            public void onBottomItemClick(PayBottomDialog dialog, View view) {
                switch (view.getId()) {
                    case R.id.ll_pay_weichat:   //微信支付
                        showToast("微信支付");
                        if (PAY_TYPE_WECHAT != payType) {
                            mIvWeichatSelect.setImageDrawable(getResources().getDrawable(R.mipmap.paytype_select));
                            mIvAliSelect.setImageDrawable(getResources().getDrawable(R.mipmap.paytype_unselect));
                            payType = PAY_TYPE_WECHAT;
                        }

                        break;
                    case R.id.ll_pay_ali:  //支付宝支付
                        showToast("支付宝支付");
                        if (PAY_TYPE_ALIBABA != payType) {
                            mIvWeichatSelect.setImageDrawable(getResources().getDrawable(R.mipmap.paytype_unselect));
                            mIvAliSelect.setImageDrawable(getResources().getDrawable(R.mipmap.paytype_select));
                            payType = PAY_TYPE_ALIBABA;
                        }
                        break;
                    case R.id.tv_confirm:  //确认支付
                        //TODO 支付
                        showToast("确认支付");
                        //重置
                        payType = PAY_TYPE_WECHAT;
                        dialog.cancel();
                        break;
                    case R.id.tv_cancel:  //取消支付
                        showToast("取消支付");
                        //重置
                        payType = PAY_TYPE_WECHAT;
                        dialog.cancel();
                        break;
                }
            }
        });
    }

    private void showToast(String s){
        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
    }
}

二 activity_main.xml 布局核心代码




   

三 自定义view核心代码

package com.kx.bottomdialogzhifubaowechat;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;

/**
 * @ 创建:   kx
 * @ 时间:    2018/12/5
 * @ 描述:    PayBottomDialog
 */

public class PayBottomDialog extends Dialog implements View.OnClickListener {

    private Context context;
    private int layoutRes;
    private View view;
    private int[] clickIds;
    private OnBottomItemClickListener listener;

    public PayBottomDialog(Context context, int layoutRes, int[] clickIds) {
        super(context, R.style.dialog_full);
        this.context = context;
        this.layoutRes = layoutRes;
        this.clickIds = clickIds;
    }

    public PayBottomDialog(Activity mActivity, View view, int[] clickIds) {
        super(mActivity, R.style.dialog_full);
        this.context = mActivity;
        this.view = view;
        this.clickIds = clickIds;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Window window = this.getWindow();
        window.setGravity(Gravity.BOTTOM);
        window.setWindowAnimations(R.style.DialogBottomAnimation);
        if (view != null) {
            setContentView(view);
        } else {
            setContentView(layoutRes);
        }
        getWindow().setLayout(-1, -1);
        setCanceledOnTouchOutside(true);
        setCancelable(true);
        if (clickIds != null) {
            for (int i = 0; i < clickIds.length; i++) {
                int clickId = clickIds[i];
                findViewById(clickId).setOnClickListener(this);
            }
        }
    }

    public View getView() {
        return view == null ? getLayoutInflater().inflate(layoutRes, (ViewGroup) null) : view;
    }

    public void onClick(View view) {
        this.listener.onBottomItemClick(this, view);
    }

    public void setOnBottomItemClickListener(OnBottomItemClickListener listener) {
        this.listener = listener;
    }


    public interface OnBottomItemClickListener {
        void onBottomItemClick(PayBottomDialog payBottomDialog, View view);
    }

    public void bottmShow() {
        if (!isShowing()) {
            show();
        }
    }

}

四 自定义view,dialog_pay_type.xml布局代码




    

        

            

            

                

                

                    

                    

                
            


        

        

        

            

            

        

        

        

            

            

            
        

        

        

            

            

            
        


        

        

            

            


        
    



五 相关styles.xml核心代码



    
    


    
    

    
    


六 相关colors.xml核心代码



    #3F51B5
    #303F9F
    #FF4081
    #fff
    
    #8a8a8a
    #333333
    #eeeeee
    #ff6b11
    #f5f5f5
    #f3f5f5
    #148ca6
    #ab72e1
    #ff8308
    #FFBA00
    #009ffa
    #4CC2FF
    #3a3a3a
    #5c5c5c
    #cccccc
    #FF6B47
    #EBF0F1
    #bfbfbf
    #ffff0000
    #FF4B13
    #ff7324
    #1bb7ff
    #e5e5e5
    #62c3fa
    #9abcff
    #58e8ff
    #ededed
    #e8e8e8
    #4cc2ff
    #55b9ff
    #3cd4d9
    #ff9555
    #4ede88
    #1DC962
    #b273ff
    #1F1F1F
    #FF7316
    #A9A9A9
    #FFA200
    #4055ceac
    #8A8A8A
    #55ceac


七 动画进出核心代码

进入动画dialog_bottom_enter.xml

 

    


退出动画dialog_bottom_exit.xml

 

    


八 本文源码下载

本文源码下载

九 尾言

本文如有错误或不当之处,欢迎读者留言斧正,互相交流学习,博主不胜感激.联系邮箱[email protected]

你可能感兴趣的:(Android)