package com.mjj.clearedittext;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* Created by 家杰 on 2015/11/20.
*/
public class PasswordEditText extends ClearEditText{
//资源
private final int INVISIBLE = R.drawable.close;
private final int VISIBLE = R.drawable.open;
//按钮宽度dp
private int mWidth;
//按钮的bitmap
private Bitmap mBitmap_invisible;
private Bitmap mBitmap_visible;
//间隔
private int Interval;
//内容是否可见
private boolean isVisible = false;
public PasswordEditText(final Context context) {
super(context);
init(context);
}
public PasswordEditText(final Context context,final AttributeSet attrs) {
super(context, attrs);
init(context);
}
public PasswordEditText(final Context context,final AttributeSet attrs,final int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
setSingleLine();
//设置EditText文本为隐藏的(注意!需要在setSingleLine()之后调用)
setTransformationMethod(PasswordTransformationMethod.getInstance());
mWidth = getmWidth_clear();
Interval = getInterval();
addRight(mWidth+Interval);
mBitmap_invisible = createBitmap(INVISIBLE,context);
mBitmap_visible = createBitmap(VISIBLE,context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int right = getWidth()+getScrollX()- Interval ;
int left = right-mWidth;
int top = (getHeight()-mWidth)/2;
int bottom = top + mWidth;
Rect rect = new Rect(left,top,right,bottom);
if(isVisible){
canvas.drawBitmap(mBitmap_visible, null, rect, null);
}else{
canvas.drawBitmap(mBitmap_invisible, null, rect, null);
}
}
/**
* 改写父类的方法
*/
@Override
protected void drawClear(int translationX, Canvas canvas) {
float scale = 1f - (float)(translationX)/(float)(getmWidth_clear()+Interval);
int right = (int) (getWidth()+getScrollX()- Interval-mWidth-Interval -getmWidth_clear()*(1f-scale)/2f);
int left = (int) (getWidth()+getScrollX()- Interval-mWidth-Interval -getmWidth_clear()*(scale+(1f-scale)/2f));
int top = (int) ((getHeight()-getmWidth_clear()*scale)/2);
int bottom = (int) (top + getmWidth_clear()*scale);
Rect rect = new Rect(left,top,right,bottom);
canvas.drawBitmap(getmBitmap_clear(), null, rect, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
boolean touchable = ( getWidth() - mWidth - Interval < event.getX() ) && (event.getX() < getWidth() - Interval);
if (touchable) {
isVisible = !isVisible;
if (isVisible){
//设置EditText文本为可见的
setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}else{
//设置EditText文本为隐藏的
setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
}
return super.onTouchEvent(event);
}
}