package com.doumee.lib_coremodel.view;
|
|
import android.content.Context;
|
import android.content.res.TypedArray;
|
import android.text.Editable;
|
import android.text.TextWatcher;
|
import android.util.AttributeSet;
|
import android.view.KeyEvent;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.inputmethod.InputMethodManager;
|
import android.widget.EditText;
|
import android.widget.LinearLayout;
|
import android.widget.RelativeLayout;
|
import android.widget.TextView;
|
|
import com.doumee.lib_coremodel.R;
|
import com.doumee.lib_coremodel.util.DpOrSp2PxUtil;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
|
/**
|
* 类:PhoneCode
|
* 作者: qxc
|
* 日期:2018/3/14.
|
*/
|
public class PhoneCode extends RelativeLayout {
|
private Context context;
|
private TextView tv_code1;
|
private TextView tv_code2;
|
private TextView tv_code3;
|
private TextView tv_code4;
|
private View v1;
|
private View v2;
|
private View v3;
|
private View v4;
|
private EditText et_code;
|
private List<String> codes = new ArrayList<>();
|
private InputMethodManager imm;
|
|
private int textColorNormal;
|
private int textColor;
|
private int lineColorNormal;
|
private int lineColor;
|
|
private int d = 0;
|
|
public PhoneCode(Context context) {
|
super(context);
|
this.context = context;
|
loadView();
|
}
|
|
public PhoneCode(Context context, AttributeSet attrs) {
|
super(context, attrs);
|
this.context = context;
|
TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.PhoneCode);
|
textColorNormal = ta.getColor(R.styleable.PhoneCode_textColorNormal,0xffE5E5E5 );
|
textColor = ta.getColor(R.styleable.PhoneCode_textColor, 0xff70D0D2);
|
lineColorNormal = ta.getColor(R.styleable.PhoneCode_lineColorNormal, textColorNormal);
|
lineColor = ta.getColor(R.styleable.PhoneCode_lineColor, textColor);
|
d = DpOrSp2PxUtil.dp2pxConvertInt(getContext(),1);
|
loadView();
|
}
|
|
private void loadView(){
|
|
imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
|
View view = LayoutInflater.from(context).inflate(R.layout.phone_code, this);
|
initView(view);
|
initEvent();
|
}
|
|
private void initView(View view){
|
tv_code1 = (TextView) view.findViewById(R.id.tv_code1);
|
tv_code2 = (TextView) view.findViewById(R.id.tv_code2);
|
tv_code3 = (TextView) view.findViewById(R.id.tv_code3);
|
tv_code4 = (TextView) view.findViewById(R.id.tv_code4);
|
et_code = (EditText) view.findViewById(R.id.et_code);
|
v1 = view.findViewById(R.id.v1);
|
v2 = view.findViewById(R.id.v2);
|
v3 = view.findViewById(R.id.v3);
|
v4 = view.findViewById(R.id.v4);
|
tv_code1.setTextColor(textColor);
|
tv_code2.setTextColor(textColor);
|
tv_code3.setTextColor(textColor);
|
tv_code4.setTextColor(textColor);
|
}
|
|
private void initEvent(){
|
//验证码输入
|
et_code.addTextChangedListener(new TextWatcher() {
|
@Override
|
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
}
|
@Override
|
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
|
}
|
@Override
|
public void afterTextChanged(Editable editable) {
|
if(editable != null && editable.length()>0) {
|
et_code.setText("");
|
if(codes.size() < 4){
|
codes.add(editable.toString());
|
showCode();
|
}
|
}
|
}
|
});
|
// 监听验证码删除按键
|
et_code.setOnKeyListener(new View.OnKeyListener() {
|
@Override
|
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
|
if (keyCode == KeyEvent.KEYCODE_DEL && keyEvent.getAction() == KeyEvent.ACTION_DOWN && codes.size()>0) {
|
codes.remove(codes.size()-1);
|
showCode();
|
return true;
|
}
|
return false;
|
}
|
});
|
}
|
|
/**
|
* 显示输入的验证码
|
*/
|
private void showCode(){
|
String code1 = "";
|
String code2 = "";
|
String code3 = "";
|
String code4 = "";
|
if(codes.size()>=1){
|
code1 = codes.get(0);
|
}
|
if(codes.size()>=2){
|
code2 = codes.get(1);
|
}
|
if(codes.size()>=3){
|
code3 = codes.get(2);
|
}
|
if(codes.size()>=4){
|
code4 = codes.get(3);
|
}
|
tv_code1.setText(code1);
|
tv_code2.setText(code2);
|
tv_code3.setText(code3);
|
tv_code4.setText(code4);
|
|
setColor();//设置高亮颜色
|
callBack();//回调
|
}
|
|
public void clearCode(){
|
codes.clear();
|
showCode();
|
}
|
|
/**
|
* 设置高亮颜色
|
*/
|
private void setColor(){
|
v1.setBackgroundColor(lineColorNormal);
|
v2.setBackgroundColor(lineColorNormal);
|
v3.setBackgroundColor(lineColorNormal);
|
v4.setBackgroundColor(lineColorNormal);
|
if(codes.size()==1){
|
v1.setBackgroundColor(lineColor);
|
}
|
if(codes.size()==2){
|
v1.setBackgroundColor(lineColor);
|
v2.setBackgroundColor(lineColor);
|
}
|
if(codes.size()==3){
|
v1.setBackgroundColor(lineColor);
|
v2.setBackgroundColor(lineColor);
|
v3.setBackgroundColor(lineColor);
|
}
|
if(codes.size()>=4){
|
v1.setBackgroundColor(lineColor);
|
v2.setBackgroundColor(lineColor);
|
v3.setBackgroundColor(lineColor);
|
v4.setBackgroundColor(lineColor);
|
}
|
setBlod(v1,codes.size()>0);
|
setBlod(v2,codes.size()>1);
|
setBlod(v3,codes.size()>2);
|
setBlod(v4,codes.size()>3);
|
}
|
|
private void setBlod(View v,boolean isBlod){
|
LinearLayout.LayoutParams params= (LinearLayout.LayoutParams) v.getLayoutParams();
|
params.height = d * (isBlod?3:1);
|
v.setLayoutParams(params);
|
}
|
|
public void etRequestFocus(){
|
et_code.requestFocus();
|
showSoftInput();
|
}
|
|
/**
|
* 回调
|
*/
|
private void callBack(){
|
if(onInputListener==null){
|
return;
|
}
|
if(codes.size()==4){
|
onInputListener.onSucess(getPhoneCode());
|
}else{
|
onInputListener.onInput();
|
}
|
}
|
|
//定义回调
|
public interface OnInputListener{
|
void onSucess(String code);
|
void onInput();
|
}
|
private OnInputListener onInputListener;
|
public void setOnInputListener(OnInputListener onInputListener){
|
this.onInputListener = onInputListener;
|
}
|
|
/**
|
* 显示键盘
|
*/
|
public void showSoftInput(){
|
//显示软键盘
|
if(imm!=null && et_code!=null) {
|
et_code.postDelayed(new Runnable() {
|
@Override
|
public void run() {
|
imm.showSoftInput(et_code, 0);
|
}
|
},200);
|
}
|
}
|
|
/**
|
* 获得手机号验证码
|
* @return 验证码
|
*/
|
public String getPhoneCode(){
|
StringBuilder sb = new StringBuilder();
|
for (String code : codes) {
|
sb.append(code);
|
}
|
return sb.toString();
|
}
|
}
|