加入:
compile 'com.flyco.dialog:FlycoDialog_Lib:1.3.2@aar'
Dialog代码:
package com.influx.kalyke.component;
/**
* Created by lj on 2017/9/6.
*/
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import com.flyco.dialog.utils.CornerUtils;
import com.flyco.dialog.widget.internal.BaseAlertDialog;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import com.flyco.dialog.utils.CornerUtils;
import com.flyco.dialog.widget.internal.BaseAlertDialog;
@SuppressWarnings("deprecation")
public class PassWordDialog extends BaseAlertDialog {
/** title underline */
private View mVLineTitle;
/** vertical line between btns */
private View mVLineVertical;
/** vertical line between btns */
private View mVLineVertical2;
/** horizontal line above btns */
private View mVLineHorizontal;
/** title underline color(标题下划线颜色) */
private int mTitleLineColor = Color.parseColor("#61AEDC");
/** title underline height(标题下划线高度) */
private float mTitleLineHeight = 1f;
/** btn divider line color(对话框之间的分割线颜色(水平+垂直)) */
private int mDividerColor = Color.parseColor("#DCDCDC");
public static final int STYLE_ONE = 0;
public static final int STYLE_TWO = 1;
private int mStyle = STYLE_ONE;
private PasswordInputView passwordInputView;
public PassWordDialog(Context context) {
super(context);
/** default value*/
mTitleTextColor = Color.parseColor("#61AEDC");
mTitleTextSize = 22f;
mContentTextColor = Color.parseColor("#383838");
mContentTextSize = 17f;
mLeftBtnTextColor = Color.parseColor("#8a000000");
mRightBtnTextColor = Color.parseColor("#8a000000");
mMiddleBtnTextColor = Color.parseColor("#8a000000");
/** default value*/
passwordInputView=new PasswordInputView(context,null);
}
private String getContentText(){
return passwordInputView.getText()==null?"":passwordInputView.getText().toString();
}
@Override
public View onCreateView() {
/** title */
mTvTitle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
mLlContainer.addView(mTvTitle);
/** title underline */
mVLineTitle = new View(mContext);
mLlContainer.addView(mVLineTitle);
/** content */
// mTvContent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
// LinearLayout.LayoutParams.WRAP_CONTENT));
LinearLayout.LayoutParams la=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
la.setMargins(5,10,5,10);
passwordInputView.setLayoutParams(la);
mLlContainer.addView(passwordInputView);
mVLineHorizontal = new View(mContext);
mVLineHorizontal.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 1));
mLlContainer.addView(mVLineHorizontal);
/** btns */
mTvBtnLeft.setLayoutParams(new LinearLayout.LayoutParams(0, dp2px(45), 1));
mLlBtns.addView(mTvBtnLeft);
mVLineVertical = new View(mContext);
mVLineVertical.setLayoutParams(new LinearLayout.LayoutParams(1, LinearLayout.LayoutParams.MATCH_PARENT));
mLlBtns.addView(mVLineVertical);
mTvBtnMiddle.setLayoutParams(new LinearLayout.LayoutParams(0, dp2px(45), 1));
mLlBtns.addView(mTvBtnMiddle);
mVLineVertical2 = new View(mContext);
mVLineVertical2.setLayoutParams(new LinearLayout.LayoutParams(1, LinearLayout.LayoutParams.MATCH_PARENT));
mLlBtns.addView(mVLineVertical2);
mTvBtnRight.setLayoutParams(new LinearLayout.LayoutParams(0, dp2px(45), 1));
mLlBtns.addView(mTvBtnRight);
mLlContainer.addView(mLlBtns);
return mLlContainer;
}
@Override
public void setUiBeforShow() {
super.setUiBeforShow();
/** title */
if (mStyle == STYLE_ONE) {
mTvTitle.setMinHeight(dp2px(48));
mTvTitle.setGravity(Gravity.CENTER_VERTICAL);
mTvTitle.setPadding(dp2px(15), dp2px(5), dp2px(0), dp2px(5));
mTvTitle.setVisibility(mIsTitleShow ? View.VISIBLE : View.GONE);
} else if (mStyle == STYLE_TWO) {
mTvTitle.setGravity(Gravity.CENTER);
mTvTitle.setPadding(dp2px(0), dp2px(15), dp2px(0), dp2px(0));
}
/** title underline */
mVLineTitle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
dp2px(mTitleLineHeight)));
mVLineTitle.setBackgroundColor(mTitleLineColor);
mVLineTitle.setVisibility(mIsTitleShow && mStyle == STYLE_ONE ? View.VISIBLE : View.GONE);
/** content */
if (mStyle == STYLE_ONE) {
mTvContent.setPadding(dp2px(15), dp2px(10), dp2px(15), dp2px(10));
mTvContent.setMinHeight(dp2px(68));
mTvContent.setGravity(mContentGravity);
} else if (mStyle == STYLE_TWO) {
mTvContent.setPadding(dp2px(15), dp2px(7), dp2px(15), dp2px(20));
mTvContent.setMinHeight(dp2px(56));
mTvContent.setGravity(Gravity.CENTER);
}
/** btns */
mVLineHorizontal.setBackgroundColor(mDividerColor);
mVLineVertical.setBackgroundColor(mDividerColor);
mVLineVertical2.setBackgroundColor(mDividerColor);
if (mBtnNum == 1) {
mTvBtnLeft.setVisibility(View.GONE);
mTvBtnRight.setVisibility(View.GONE);
mVLineVertical.setVisibility(View.GONE);
mVLineVertical2.setVisibility(View.GONE);
} else if (mBtnNum == 2) {
mTvBtnMiddle.setVisibility(View.GONE);
mVLineVertical.setVisibility(View.GONE);
}
/**set background color and corner radius */
float radius = dp2px(mCornerRadius);
mLlContainer.setBackgroundDrawable(CornerUtils.cornerDrawable(mBgColor, radius));
mTvBtnLeft.setBackgroundDrawable(CornerUtils.btnSelector(radius, mBgColor, mBtnPressColor, 0));
mTvBtnRight.setBackgroundDrawable(CornerUtils.btnSelector(radius, mBgColor, mBtnPressColor, 1));
mTvBtnMiddle.setBackgroundDrawable(CornerUtils.btnSelector(mBtnNum == 1 ? radius : 0, mBgColor, mBtnPressColor, -1));
}
// --->属性设置
/** set style(设置style) */
public PassWordDialog style(int style) {
this.mStyle = style;
return this;
}
/** set title underline color(设置标题下划线颜色) */
public PassWordDialog titleLineColor(int titleLineColor) {
this.mTitleLineColor = titleLineColor;
return this;
}
/** set title underline height(设置标题下划线高度) */
public PassWordDialog titleLineHeight(float titleLineHeight_DP) {
this.mTitleLineHeight = titleLineHeight_DP;
return this;
}
/** set divider color between btns(设置btn分割线的颜色) */
public PassWordDialog dividerColor(int dividerColor) {
this.mDividerColor = dividerColor;
return this;
}
}
输入框:
package com.influx.kalyke.component;
/**
* Created by lj on 2017/9/1.
*/
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.text.InputFilter;
import android.text.InputType;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.widget.EditText;
import com.influx.kalyke.R;
import static android.graphics.Paint.ANTI_ALIAS_FLAG;
/**
* Desc:
* User: tiansj
*/
public class PasswordInputView extends EditText {
private static final int defaultContMargin = 5;
private static final int defaultSplitLineWidth = 3;
private int borderColor = 0xFFCCCCCC;
private float borderWidth = 5;
private float borderRadius = 3;
private int passwordLength = 4;
private int passwordColor = 0xFF000000;
private float passwordWidth = 8;
private float passwordRadius = 3;
private Paint passwordPaint = new Paint(ANTI_ALIAS_FLAG);
private Paint borderPaint = new Paint(ANTI_ALIAS_FLAG);
private int textLength;
public PasswordInputView(Context context, AttributeSet attrs) {
super(context, attrs);
DisplayMetrics dm = getResources().getDisplayMetrics();
borderWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, borderWidth, dm);
borderRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, borderRadius, dm);
passwordLength = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, passwordLength, dm);
passwordWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, passwordWidth, dm);
passwordRadius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, passwordRadius, dm);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PasswordInputView, 0, 0);
borderColor = a.getColor(R.styleable.PasswordInputView_pivBorderColor, borderColor);
borderWidth = a.getDimension(R.styleable.PasswordInputView_pivBorderWidth, borderWidth);
borderRadius = a.getDimension(R.styleable.PasswordInputView_pivBorderRadius, borderRadius);
passwordLength = a.getInt(R.styleable.PasswordInputView_pivPasswordLength, passwordLength);
passwordColor = a.getColor(R.styleable.PasswordInputView_pivPasswordColor, passwordColor);
passwordWidth = a.getDimension(R.styleable.PasswordInputView_pivPasswordWidth, passwordWidth);
passwordRadius = a.getDimension(R.styleable.PasswordInputView_pivPasswordRadius, passwordRadius);
a.recycle();
borderPaint.setStrokeWidth(borderWidth);
borderPaint.setColor(borderColor);
passwordPaint.setStrokeWidth(passwordWidth);
passwordPaint.setStyle(Paint.Style.FILL);
passwordPaint.setColor(passwordColor);
this.setInputType(InputType.TYPE_CLASS_NUMBER);
this.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)});
}
@Override
protected void onDraw(Canvas canvas) {
int width = getWidth();
int height = getHeight();
// 外边框
RectF rect = new RectF(0, 0, width, height);
borderPaint.setColor(borderColor);
canvas.drawRoundRect(rect, borderRadius, borderRadius, borderPaint);
// 内容区
RectF rectIn = new RectF(rect.left + defaultContMargin, rect.top + defaultContMargin,
rect.right - defaultContMargin, rect.bottom - defaultContMargin);
borderPaint.setColor(Color.WHITE);
canvas.drawRoundRect(rectIn, borderRadius, borderRadius, borderPaint);
// 分割线
borderPaint.setColor(borderColor);
borderPaint.setStrokeWidth(defaultSplitLineWidth);
for (int i = 1; i < passwordLength; i++) {
float x = width * i / passwordLength;
canvas.drawLine(x, 0, x, height, borderPaint);
}
// 密码
float cx, cy = height/ 2;
float half = width / passwordLength / 2;
for(int i = 0; i < textLength; i++) {
cx = width * i / passwordLength + half;
canvas.drawCircle(cx, cy, passwordWidth, passwordPaint);
}
}
@Override
protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {
super.onTextChanged(text, start, lengthBefore, lengthAfter);
this.textLength = text.toString().length();
invalidate();
}
public int getBorderColor() {
return borderColor;
}
public void setBorderColor(int borderColor) {
this.borderColor = borderColor;
borderPaint.setColor(borderColor);
invalidate();
}
public float getBorderWidth() {
return borderWidth;
}
public void setBorderWidth(float borderWidth) {
this.borderWidth = borderWidth;
borderPaint.setStrokeWidth(borderWidth);
invalidate();
}
public float getBorderRadius() {
return borderRadius;
}
public void setBorderRadius(float borderRadius) {
this.borderRadius = borderRadius;
invalidate();
}
public int getPasswordLength() {
return passwordLength;
}
public void setPasswordLength(int passwordLength) {
this.passwordLength = passwordLength;
invalidate();
}
public int getPasswordColor() {
return passwordColor;
}
public void setPasswordColor(int passwordColor) {
this.passwordColor = passwordColor;
passwordPaint.setColor(passwordColor);
invalidate();
}
public float getPasswordWidth() {
return passwordWidth;
}
public void setPasswordWidth(float passwordWidth) {
this.passwordWidth = passwordWidth;
passwordPaint.setStrokeWidth(passwordWidth);
invalidate();
}
public float getPasswordRadius() {
return passwordRadius;
}
public void setPasswordRadius(float passwordRadius) {
this.passwordRadius = passwordRadius;
invalidate();
}
}
用法,和
NormalDialog用法一致:
final PassWordDialog p = new PassWordDialog(mainActivityActivity);
p.title("请输入验证码")
.btnText("取消", "确定")//
.btnTextColor(Color.GRAY, Color.GREEN)
.style(NormalDialog.STYLE_TWO)//
.titleTextSize(23)//
.widthScale(0.4f)
.showAnim(new BounceTopEnter())//
.dismissAnim(new SlideBottomExit())//
.show();