android图片添加点击事件,android 为EditText的drawable添加点击事件

/**

* Created by jingzz on 2020/3/04.

*/

public class ClickIconEditText extends AppCompatEditText {

public static final int CLICK_LEFT_ICON = 0;

public static final int CLICK_RIGHT_ICON = 2;

public static final int CLICK_TOP_ICON = 1;

public static final int CLICK_BOTTOM_ICON = 3;

public ClickIconEditText(Context context) {

this(context,null);

}

public ClickIconEditText(Context context, AttributeSet attrs) {

this(context, attrs, R.attr.editTextStyle);

}

public ClickIconEditText(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() != MotionEvent.ACTION_UP)

return super.onTouchEvent(event);

if(onIconClickListener ==null)

return super.onTouchEvent(event);

Drawable[] drawables = getCompoundDrawables();

//0左边图片 1 上边图片 2右边图片 3 下边图片

Drawable dl = drawables[0];

Drawable dt = drawables[1];

Drawable dr = drawables[2];

Drawable db = drawables[3];

int pt = getPaddingTop()+(dt==null?0:dt.getIntrinsicHeight());

int pb = getPaddingBottom()+(db== null?0:db.getIntrinsicHeight());

int pl = getPaddingLeft()+(dl==null?0:dl.getIntrinsicWidth());

int pr = getPaddingRight()+(dr==null?0:dr.getIntrinsicWidth());

float x = event.getX();

float y = event.getY();

int mx = (getWidth()-pl-pr)/2+pl;

int my = (getHeight()-pt-pb)/2+pt;

if(dl != null){

int dlw = dl.getIntrinsicWidth();

int dlh = dl.getIntrinsicHeight();

Rangerlx = new Range<>(getPaddingLeft()-getCompoundDrawablePadding(),getPaddingLeft()+dlw+getCompoundDrawablePadding());

Rangerly = new Range<>(my-dlh/2-getCompoundDrawablePadding(),my+dlh/2+dlw+getCompoundDrawablePadding());

if(rlx.contains((int) x)&&rly.contains((int) y)){

LogUtils.e("点击了左边图片");

onIconClickListener.onIconClickListener(this,CLICK_LEFT_ICON);

return true;

}

}

if(dr != null){

int drw = dr.getIntrinsicWidth();

int drh = dr.getIntrinsicHeight();

Rangerrx = new Range<>(getWidth()-getPaddingRight()-drw-getCompoundDrawablePadding(),getWidth()-getPaddingRight()-getCompoundDrawablePadding());

Rangerry = new Range<>(my-drh/2-getCompoundDrawablePadding(),my+drh/2+drw+getCompoundDrawablePadding());

if(rrx.contains((int) x)&&rry.contains((int) y)){

LogUtils.e("点击了右边图片");

onIconClickListener.onIconClickListener(this,CLICK_RIGHT_ICON);

return true;

}

}

if(dt != null){

int dtw = dt.getIntrinsicWidth();

int dth = dt.getIntrinsicHeight();

Rangertx = new Range<>(mx-dtw/2-getCompoundDrawablePadding(),mx+dtw/2+getCompoundDrawablePadding());

Rangerty = new Range<>(getPaddingTop()-getCompoundDrawablePadding(),pt+getCompoundDrawablePadding());

if(rtx.contains((int) x)&&rty.contains((int) y)){

LogUtils.e("点击了上边图片");

onIconClickListener.onIconClickListener(this,CLICK_TOP_ICON);

return true;

}

}

if(db != null){

int dbw = db.getIntrinsicWidth();

Rangerbx = new Range<>(mx-dbw/2-getCompoundDrawablePadding(),mx+dbw/2+getCompoundDrawablePadding());

Rangerby = new Range<>(getHeight()-pb-getCompoundDrawablePadding(),getHeight()-getPaddingBottom()-getCompoundDrawablePadding());

if(rbx.contains((int) x)&&rby.contains((int) y)){

LogUtils.e("点击了下边图片");

onIconClickListener.onIconClickListener(this,CLICK_BOTTOM_ICON);

return true;

}

}

return super.onTouchEvent(event);

}

private OnIconClickListener onIconClickListener;

public void setOnIconClickListener(OnIconClickListener onIconClickListener) {

this.onIconClickListener = onIconClickListener;

}

public interface OnIconClickListener{

/**

* @param view 被点击的view

* @param iconType 点击的图标位置 0:左边 1:上边 2:右边 3:下边

*/

void onIconClickListener(ClickIconEditText view,int iconType);

}

}

使用方法:

ClickIconEditText editText = findViewById(R.id.etidText);

editText.setOnIconClickListener(new ClickIconEditText.OnIconClickListener() {

@Override

public void onIconClickListener(ClickIconEditText view, int iconType) {

switch (iconType) {

case ClickIconEditText.CLICK_LEFT_ICON:

//点击了左侧图标

break;

case ClickIconEditText.CLICK_RIGHT_ICON:

//点击了右侧图标

break;

case ClickIconEditText.CLICK_TOP_ICON:

//点击了上边图标

break;

case ClickIconEditText.CLICK_BOTTOM_ICON:

//点击了下边图标

break;

}

}

});

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值