您的位置:首页 > 移动开发 > Android开发

Android 设置DrawableRight和DrawableLeft 的通用点击事件

2016-11-18 15:23 253 查看
package com.lb.frame.views;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;

/**
* Created by libin on 2016/11/18.
*/

public class AddAndSubEditText extends EditText {

private OnDrawableLeftListener mLeftListener;
private OnDrawableRightListener mRightListener;
private OnDrawableListener drawableListener;
final int DRAWABLE_LEFT = 0;
final int DRAWABLE_TOP = 1;
final int DRAWABLE_RIGHT = 2;
final int DRAWABLE_BOTTOM = 3;

@SuppressLint("NewApi")
public AddAndSubEditText(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}

public AddAndSubEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

public AddAndSubEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}

public AddAndSubEditText(Context context) {
super(context);
}

public void setOnDrawableLeftListener(OnDrawableLeftListener listener) {
this.mLeftListener = listener;
}

public void setOnDrawableRightListener(OnDrawableRightListener listener) {
this.mRightListener = listener;
}

public void setOnDrawableClickListener(OnDrawableListener listener) {
this.drawableListener = listener;
}

public interface OnDrawableListener {
void onDrawableLeftClick(View view);

void onDrawableRightClick(View view);
}

public interface OnDrawableLeftListener {
void onDrawableLeftClick(View view);
}

public interface OnDrawableRightListener {
void onDrawableRightClick(View view);
}

@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_UP:
if (mRightListener != null) {
Drawable drawableRight = getCompoundDrawables()[DRAWABLE_RIGHT];
if (drawableRight != null && event.getRawX() >= (getRight() - drawableRight.getBounds().width())) {
mRightListener.onDrawableRightClick(this);
return true;
}
}
if (drawableListener != null) {
Drawable drawableRight = getCompoundDrawables()[DRAWABLE_RIGHT];
if (drawableRight != null && event.getRawX() >= (getRight() - drawableRight.getBounds().width())) {
drawableListener.onDrawableRightClick(this);
return true;
}
Drawable drawableLeft = getCompoundDrawables()[DRAWABLE_LEFT];
if (drawableLeft != null && event.getRawX() <= (getLeft() + drawableLeft.getBounds().width())) {
drawableListener.onDrawableLeftClick(this);
return true;
}
}
if (mLeftListener != null) {
Drawable drawableLeft = getCompoundDrawables()[DRAWABLE_LEFT];
if (drawableLeft != null && event.getRawX() <= (getLeft() + drawableLeft.getBounds().width())) {
mLeftListener.onDrawableLeftClick(this);
return true;
}
}
break;
}

return super.onTouchEvent(event);
}
}



使用方法:同时设置左右两边的图片点击事件,也可单独设置,方便使用

people_num_et.setOnDrawableClickListener(new AddAndSubEditText.OnDrawableListener() {
@Override
public void onDrawableLeftClick(View view) {
if (peopleNum > 1) {
people_num_et.setText(String.valueOf(--peopleNum));
} else {
T.show("至少1人");
}
}

@Override
public void onDrawableRightClick(View view) {
if (peopleNum < 3) {
people_num_et.setText(String.valueOf(++peopleNum));
} else {
T.show("最多3人");
}
}
});
people_num_et.setOnDrawableLeftListener(new AddAndSubEditText.OnDrawableLeftListener() {
@Override
public void onDrawableLeftClick(View view) {
if (peopleNum > 0) {
people_num_et.setText(--peopleNum);
}
}
});
people_num_et.setOnDrawableRightListener(new AddAndSubEditText.OnDrawableRightListener() {
@Override
public void onDrawableRightClick(View view) {
if (peopleNum < 3) {
people_num_et.setText(++peopleNum);
} else {
T.show("最多3人");
}
}
});
参考:http://blog.csdn.net/lib739449500/article/details/50236439修改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息