带有信用卡类型自动检测功能的Android Edittext

8
我正在处理Android中的付款选项。通过提供信用卡支付选项,一些用户可能会错误地选择其他信用卡类型来进行某些其他信用卡号码的付款。因此,我决定查看这个问题以根据输入的数字自动检测卡类型。
我发现Flipkart在其Android应用程序中已经实现了此功能,我在此附上该功能的截图。
请问如何像动画一样,在更改卡类型时发生?
我知道如何创建一个文本监视器,并基于输入更改带有EditText的drawableRight图像的卡类型。 但是需要在drawableRight上进行一些动画效果。
谢谢您的帮助!

https://dev59.com/F1HTa4cB1Zd3GeqPVNyk#37187857 - HenryChuang
3个回答

9
通过以上答案和建议的帮助,我已经获得了结果。
以下是解决方案:
创建一个正则表达式制作函数。
public static ArrayList<String> listOfPattern()
{
    ArrayList<String> listOfPattern=new ArrayList<String>();

    String ptVisa = "^4[0-9]$";

    listOfPattern.add(ptVisa);

    String ptMasterCard = "^5[1-5]$";

    listOfPattern.add(ptMasterCard);

    String ptDiscover = "^6(?:011|5[0-9]{2})$";

    listOfPattern.add(ptDiscover);

    String ptAmeExp = "^3[47]$";

    listOfPattern.add(ptAmeExp);

    return listOfPattern;
}

Integer[] imageArray = { R.drawable.visa, R.drawable.master, R.drawable.disnet, R.drawable.ae };

addTextChangedListener 中使用以下代码:

creditcardnumberedittext.addTextChangedListener(new TextWatcher()
    {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count)
        {
            String ccNum = s.toString();

            if(ccNum.length()>=2)
            {
                for (int i = 0; i < listOfPattern.size(); i++)
                {
                    if (ccNum.substring(0, 2).matches(listOfPattern.get(i)))
                    {
                        creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, imageArray[i], 0);

                        cardtype = String.valueOf(i);
                    }
                }
            }

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after)
        {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s)
        {               

            if (!creditcardnumberedittext.getText().toString().equalsIgnoreCase(""))
            {
                for (int i = 0; i < listOfPattern.size(); i++)
                {
                    if (creditcardnumberedittext.getText().toString().matches(listOfPattern.get(i)))
                    {
                        creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, imageArray[i], 0);

                        cardtype = String.valueOf(i);
                    }
                }
            }
            else
            {
                creditcardnumberedittext.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.allcards, 0);
            }
        }
    });

Thanks..


1
你将会观察输入的文本,检查前几个数字以匹配此处找到的代码:

http://www.stevemorse.org/ssn/List_of_Bank_Identification_Numbers.html

这可以通过Murtaza Hussain指出的TextWatcher监听器来完成。
通过以下方式检查文本:
switch (s.charAt(0)){
case '4':
    // show visa symbol
    break;
case '5':
    // show mastercard symbol
    break;
...

谢谢提供链接,这有助于我制作正则表达式。 - Brendon

0

这方面没有原生功能。您需要在EditText上设置TextWatcher类。它的作用是在您的字段上设置一个监听器,当您输入时,它会提供一种检查输入的方法。

yourEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

                // TODO Auto-generated method stub
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {

                //Check your Credit Card Number here.

            }


   });

这取决于你的实现方式,你也可以使用FlipAnimator来翻转视图。但是,如果你只是在寻找代码,那就不好了。尝试使用上面解释的技术。 - Murtaza Khursheed Hussain
注意:您也可以将SlideUpSlideDown动画定义为FlipAnimator - Murtaza Khursheed Hussain
我不是在寻找完全相同的代码,而是我的问题是如何对整个列表进行动画处理。 - Brendon
好的,我解释了这个技术,你可以试一试。 - Murtaza Khursheed Hussain
@MurtazaKhursheedHussain,请详细回答问题。问题是关于如何获取与卡号对应的不同卡片图像。您的答案只显示了一个addTextChangedListener。 - debo.stackoverflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接