经常用到多个透明图片层叠,但又需要获取不同图片的点击事件,本文实现图片透明区域穿透点击事件。
实现人体各个部位点击
内部类
private class MyOnTouchListener implements OnTouchListener {
private ImageView touchImageView;
private Bitmap touchBitmap;
private int normal_iv;
private int press_iv;
public MyOnTouchListener(ImageView touchImageView, Bitmap touchBitmap,
int normal_iv, int press_iv) {
super();
this.touchImageView = touchImageView;
this.touchBitmap = touchBitmap;
this.normal_iv = normal_iv;
this.press_iv = press_iv;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
LogUtils.i(TAG, "onTouch。。。");
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
LogUtils.i(TAG, "ACTION_DOWN ");
downOrMove(event);
break;
case MotionEvent.ACTION_MOVE:
LogUtils.i(TAG, "ACTION_MOVE ");
downOrMove(event);
break;
case MotionEvent.ACTION_UP:
LogUtils.i(TAG, "ACTION_UP ");
touchImageView.setImageResource(normal_iv);
break;
default:
break;
}
return false;
}
private void downOrMove(MotionEvent event) {
Matrix inverse = new Matrix();
touchImageView.getImageMatrix().invert(inverse);
float[] touchPoint = new float[] { event.getX(), event.getY() };
inverse.mapPoints(touchPoint);
int xCoord = Integer.valueOf((int) touchPoint[0]);
int yCoord = Integer.valueOf((int) touchPoint[1]);
if((xCoord >= 0 && xCoord < touchBitmap.getWidth()) && (yCoord >=0 && yCoord < touchBitmap.getHeight())) {
if (touchBitmap.getPixel(xCoord, yCoord) == 0) {
touchImageView.setImageResource(normal_iv);
} else {
touchImageView.setImageResource(press_iv);
}
}
}
}
activity中实现
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
LogUtils.i(TAG, "Activity ACTION_DOWN ");
break;
case MotionEvent.ACTION_MOVE:
LogUtils.i(TAG, "Activity ACTION_MOVE ");
break;
case MotionEvent.ACTION_UP:
LogUtils.i(TAG, "Activity ACTION_UP ");
cancelAllIv();
break;
default:
break;
}
return super.onTouchEvent(event);
}