天天看点

仿支付宝支付 密码输入

仿支付宝支付 密码输入

下载demo http://download.csdn.net/download/tangjili5620/9952470

资源下载:

http://download.csdn.net/download/tangjili5620/9952470

1.自定义输入控件(直接拷贝使用)

//====================控件start=====================================

import android.content.Context;

import android.text.Editable;

import android.text.InputFilter;

import android.text.InputType;

import android.text.Selection;

import android.text.TextWatcher;

import android.text.method.HideReturnsTransformationMethod;

import android.text.method.PasswordTransformationMethod;

import android.util.AttributeSet;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

import android.widget.TextView;

public class PayPwdEditText extends RelativeLayout{

    private EditText editText; //文本编辑框

    private Context context;

    private LinearLayout linearLayout; //文本密码的文本

    private TextView[] textViews; //文本数组

    private int pwdlength = 6; //密码长度, 默认6

    private OnTextFinishListener onTextFinishListener;

    public PayPwdEditText(Context context) {

        this(context, null);

    }

    public PayPwdEditText(Context context, AttributeSet attrs) {

        this(context, attrs, 0);

    }

    public PayPwdEditText(Context context, AttributeSet attrs, int defStyleAttr) {

        super(context, attrs, defStyleAttr);

        this.context = context;

    }

    public void initStyle(int bgdrawable, int pwdlength, float splilinewidth, int splilinecolor, int pwdcolor, int pwdsize)

    {

        this.pwdlength = pwdlength;

        initEdit(bgdrawable);

        initShowInput(bgdrawable, pwdlength, splilinewidth, splilinecolor, pwdcolor, pwdsize);

    }

    private void initEdit(int bgcolor)

    {

        editText = new EditText(context);

        editText.setBackgroundResource(bgcolor);

        editText.setCursorVisible(false);

        editText.setTextSize(0);

        editText.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD | InputType.TYPE_CLASS_NUMBER);

        editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(pwdlength)});

        editText.addTextChangedListener(new TextWatcher() {

            @Override

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

                Editable etext = editText.getText();

                Selection.setSelection(etext, etext.length());

            }

            @Override

            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override

            public void afterTextChanged(Editable s) {

                initDatas(s);

                if(s.length() == pwdlength)

                {

                    if(onTextFinishListener != null)

                    {

                        onTextFinishListener.onFinish(s.toString().trim());

                    }

                }

            }

        });

        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

        lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

        addView(editText, lp);

    }

    public void initShowInput(int bgcolor, int pwdlength, float slpilinewidth, int splilinecolor, int pwdcolor, int pwdsize)

    {

        //添加密码框父布局

        linearLayout = new LinearLayout(context);

        linearLayout.setBackgroundResource(bgcolor);

        LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

        linearLayout.setLayoutParams(layoutParams);

        linearLayout.setOrientation(LinearLayout.HORIZONTAL);

        addView(linearLayout);

        //添加密码框

        textViews = new TextView[pwdlength];

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LayoutParams.MATCH_PARENT);

        params.weight = 1;

        params.gravity = Gravity.CENTER;

        LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(dip2px(context, slpilinewidth),LayoutParams.MATCH_PARENT);

        for(int i = 0; i < textViews.length; i++)

        {

            final int index = i;

            TextView textView = new TextView(context);

            textView.setGravity(Gravity.CENTER);

            textViews[i] = textView;

            textViews[i].setTextSize(pwdsize);

            textViews[i].setTextColor(context.getResources().getColor(pwdcolor));

            textViews[i].setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD | InputType.TYPE_CLASS_NUMBER);

            linearLayout.addView(textView, params);

            if(i < textViews.length - 1)

            {

                View view = new View(context);

                view.setBackgroundColor(context.getResources().getColor(splilinecolor));

                linearLayout.addView(view, params2);

            }

        }

    }

    public void setShowPwd(boolean showPwd) {

        int length = textViews.length;

        for(int i = 0; i < length; i++) {

            if (showPwd) {

                textViews[i].setTransformationMethod(PasswordTransformationMethod.getInstance());

            } else {

                textViews[i].setTransformationMethod(HideReturnsTransformationMethod.getInstance());

            }

        }

    }

    public void setInputType(int type)

    {

        int length = textViews.length;

        for(int i = 0; i < length; i++) {

            textViews[i].setInputType(type);

        }

    }

    public void clearText()

    {

        editText.setText("");

        for(int i = 0; i < pwdlength; i++)

        {

            textViews[i].setText("");

        }

    }

    public void setOnTextFinishListener(OnTextFinishListener onTextFinishListener) {

        this.onTextFinishListener = onTextFinishListener;

    }

    public void initDatas(Editable s)

    {

        if(s.length() > 0)

        {

            int length = s.length();

            for(int i = 0; i < pwdlength; i++)

            {

                if(i < length)

                {

                    for(int j = 0; j < length; j++)

                    {

                        char ch = s.charAt(j);

                        textViews[j].setText(String.valueOf(ch));

                    }

                }

                else

                {

                    textViews[i].setText("");

                }

            }

        }

        else

        {

            for(int i = 0; i < pwdlength; i++)

            {

                textViews[i].setText("");

            }

        }

    }

    public String getPwdText()

    {

        if(editText != null)

            return editText.getText().toString().trim();

        return "";

    }

    public static int dip2px(Context context, float dipValue) {

        final float scale = context.getResources().getDisplayMetrics().density;

        return (int) (dipValue * scale + 0.5f);

    }

    public interface OnTextFinishListener

    {

        void onFinish(String str);

    }

}

//=============控件end==========================

2.MainActivity 布局中使用自定义控件

<com.jiaotong.app.view.PayPwdEditText android:id="@+id/input_num" android:layout_width="match_parent" android:layout_height="40dp" android:layout_marginLeft="13dp" android:layout_marginRight="13dp" android:layout_marginTop="20dp" />

3.MainActivity 代码中使用 inputNum.initStyle(R.drawable.edit_num_bg, 8, 0.33f, R.color.all_pink, R.color.classify_gray, 20); inputNum.setShowPwd(false);//明文 inputNum.setOnTextFinishListener(new PayPwdEditText.OnTextFinishListener() { @Override public void onFinish(String str) { Toast.makeText(ShouXieActivity.this, inputNum.getPwdText().toString() + "over" + str, Toast.LENGTH_SHORT).show(); } });

4.设置输入框背景(R.drawable.edit_num_bg)

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="false"> <shape> <corners android:radius="3dp"/> <solid android:color="#ffffff"/> <stroke android:color="@color/all_pink" android:width="0.3dp"/> </shape> </item> </selector>