效果图:
主要代码:
import java.util.ArrayList;import android.annotation.SuppressLint;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import com.example.payui.KeyboardEnum.ActionEnum;import com.lidroid.xutils.ViewUtils;import com.lidroid.xutils.view.annotation.ViewInject;import com.lidroid.xutils.view.annotation.event.OnClick;import com.lidroid.xutils.view.annotation.event.OnLongClick;/*** Dialog 显示视图* @author LanYan**/@SuppressLint("InflateParams")public class PayPasswordView{@ViewInject(R.id.pay_keyboard_del)private ImageView del;@ViewInject(R.id.pay_keyboard_zero)private ImageView zero;@ViewInject(R.id.pay_keyboard_one)private ImageView one;@ViewInject(R.id.pay_keyboard_two)private ImageView two;@ViewInject(R.id.pay_keyboard_three)private ImageView three;@ViewInject(R.id.pay_keyboard_four)private ImageView four;@ViewInject(R.id.pay_keyboard_five)private ImageView five;@ViewInject(R.id.pay_keyboard_sex)private ImageView sex;@ViewInject(R.id.pay_keyboard_seven)private ImageView seven;@ViewInject(R.id.pay_keyboard_eight)private ImageView eight;@ViewInject(R.id.pay_keyboard_nine)private ImageView nine;@ViewInject(R.id.pay_cancel)private TextView cancel;@ViewInject(R.id.pay_sure)private TextView sure;@ViewInject(R.id.pay_box1)private TextView box1;@ViewInject(R.id.pay_box2)private TextView box2;@ViewInject(R.id.pay_box3)private TextView box3;@ViewInject(R.id.pay_box4)private TextView box4;@ViewInject(R.id.pay_box5)private TextView box5;@ViewInject(R.id.pay_box6)private TextView box6;@ViewInject(R.id.pay_title)private TextView title;@ViewInject(R.id.pay_content)private TextView content;private ArrayList<String> mList=new ArrayList<String>();private View mView;private OnPayListener listener;private Context mContext;public PayPasswordView(){}public static PayPasswordView getInstance(){return new PayPasswordView();}public View getDecorView(String monney,Context mContext,OnPayListener listener){this.listener=listener;this.mContext=mContext;mView=LayoutInflater.from(mContext).inflate(R.layout.item_paypassword, null);ViewUtils.inject(this,mView);content.setText("消费金额:"+monney+"元");return mView;}@OnClick({R.id.pay_keyboard_del,R.id.pay_keyboard_zero,R.id.pay_keyboard_one,R.id.pay_keyboard_two,R.id.pay_keyboard_three,R.id.pay_keyboard_four,R.id.pay_keyboard_five,R.id.pay_keyboard_sex,R.id.pay_keyboard_seven,R.id.pay_keyboard_eight,R.id.pay_keyboard_nine,R.id.pay_cancel,R.id.pay_sure})private void onClick(View v){if(v==zero){parseActionType(KeyboardEnum.zero);}else if(v==one){parseActionType(KeyboardEnum.one);}else if(v==two){parseActionType(KeyboardEnum.two);}else if(v==three){parseActionType(KeyboardEnum.three);}else if(v==four){parseActionType(KeyboardEnum.four);}else if(v==five){parseActionType(KeyboardEnum.five);}else if(v==sex){parseActionType(KeyboardEnum.sex);}else if(v==seven){parseActionType(KeyboardEnum.seven);}else if(v==eight){parseActionType(KeyboardEnum.eight);}else if(v==nine){parseActionType(KeyboardEnum.nine);}else if(v==cancel){parseActionType(KeyboardEnum.cancel);}else if(v==sure){parseActionType(KeyboardEnum.sure);}else if(v==del){parseActionType(KeyboardEnum.del);}}@OnLongClick(R.id.pay_keyboard_del)public boolean onLongClick(View v) {// TODO Auto-generated method stubparseActionType(KeyboardEnum.longdel);return false;}private void parseActionType(KeyboardEnum type) {// TODO Auto-generated method stubif(type.getType()==ActionEnum.add){if(mList.size()<6){mList.add(type.getValue());updateUi();}}else if(type.getType()==ActionEnum.delete){if(mList.size()>0){mList.remove(mList.get(mList.size()-1));updateUi();}}else if(type.getType()==ActionEnum.cancel){listener.onCancelPay();}else if(type.getType()==ActionEnum.sure){if(mList.size()<6){Toast.makeText(mContext, "支付密码必须6位", Toast.LENGTH_SHORT).show();}else{String payValue="";for (int i = 0; i < mList.size(); i++) {payValue+=mList.get(i);}listener.onSurePay(payValue);}}else if(type.getType()==ActionEnum.longClick){mList.clear();updateUi();}}private void updateUi() {// TODO Auto-generated method stubif(mList.size()==0){box1.setText("");box2.setText("");box3.setText("");box4.setText("");box5.setText("");box6.setText("");}else if(mList.size()==1){box1.setText(mList.get(0));box2.setText("");box3.setText("");box4.setText("");box5.setText("");box6.setText("");}else if(mList.size()==2){box1.setText(mList.get(0));box2.setText(mList.get(1));box3.setText("");box4.setText("");box5.setText("");box6.setText("");}else if(mList.size()==3){box1.setText(mList.get(0));box2.setText(mList.get(1));box3.setText(mList.get(2));box4.setText("");box5.setText("");box6.setText("");}else if(mList.size()==4){box1.setText(mList.get(0));box2.setText(mList.get(1));box3.setText(mList.get(2));box4.setText(mList.get(3));box5.setText("");box6.setText("");}else if(mList.size()==5){box1.setText(mList.get(0));box2.setText(mList.get(1));box3.setText(mList.get(2));box4.setText(mList.get(3));box5.setText(mList.get(4));box6.setText("");}else if(mList.size()==6){box1.setText(mList.get(0));box2.setText(mList.get(1));box3.setText(mList.get(2));box4.setText(mList.get(3));box5.setText(mList.get(4));box6.setText(mList.get(5));}}public interface OnPayListener{void onCancelPay();void onSurePay(String password);}}
Enum:
public enum KeyboardEnum {one(ActionEnum.add,"1"),two(ActionEnum.add,"2"),three(ActionEnum.add,"3"),four(ActionEnum.add,"4"),five(ActionEnum.add,"5"),sex(ActionEnum.add,"6"),seven(ActionEnum.add,"7"),eight(ActionEnum.add,"8"),nine(ActionEnum.add,"9"),zero(ActionEnum.add,"0"),del(ActionEnum.delete,"del"),longdel(ActionEnum.longClick,"longclick"),cancel(ActionEnum.cancel,"cancel"),sure(ActionEnum.sure,"sure");public enum ActionEnum{add,delete,longClick,cancel,sure}private ActionEnum type;private String value;private KeyboardEnum(ActionEnum type,String value){this.type=type;this.value=value;}public ActionEnum getType() {return type;}public void setType(ActionEnum type) {this.type = type;}public String getValue() {return value;}public void setValue(String value) {this.value = value;}}
测试类:
public class MainActivity extends Activity {private DialogWidget mDialogWidget;private TextView payTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);payTextView=(TextView)findViewById(R.id.payEditText);payTextView.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubmDialogWidget=new DialogWidget(MainActivity.this, getDecorViewDialog());mDialogWidget.show();}});}protected View getDecorViewDialog() {// TODO Auto-generated method stubreturn PayPasswordView.getInstance().getDecorView("45.99",this,new OnPayListener() {@Overridepublic void onSurePay(String password) {// TODO Auto-generated method stubmDialogWidget.dismiss();mDialogWidget=null;payTextView.setText(password);Toast.makeText(getApplicationContext(), "交易成功", Toast.LENGTH_SHORT).show();}@Overridepublic void onCancelPay() {// TODO Auto-generated method stubmDialogWidget.dismiss();mDialogWidget=null;Toast.makeText(getApplicationContext(), "交易已取消", Toast.LENGTH_SHORT).show();}});}}