Imaging
Imaging copied to clipboard
涂鸦模式时,双指缩放后左上角会出现一个红点
通过断点发现是IMGView.onTouch有个关于mPointerCount>1的判断,双指缩放时存在mPointerCount=1的情况,导致当mPointerCount=2走向onPathDone时会把空数据存进path list中。
解决了吗?我也发现这个问题了
通过断点发现是IMGView.onTouch有个关于mPointerCount>1的判断,双指缩放时存在mPointerCount=1的情况,导致当mPointerCount=2走向onPathDone时会把空数据存进path list中。
我目前这样解决,涂鸦时取消双指缩放和拖拽
在onTouch方法中修改如下代码:
else if (mPointerCount > 1) { // scaledTouchSlop=ViewConfiguration.get(getContext()).getScaledTouchSlop(); if (event.getX() - downX >= scaledTouchSlop || event.getY() - downY >= scaledTouchSlop) { onPathDone(); } else { mPen.reset(); }
handled |= onTouchNONE(event);
}
@MrxMo Could you expand more detail? Which file with onTouch method thats you are mentioning? I have onTouch Method on IMGView, but it seem doesn't same with you.
boolean onTouch(MotionEvent event) {
if (isHoming()) {
// Homing
return false;
}
mPointerCount = event.getPointerCount();
boolean handled = mSGDetector.onTouchEvent(event);
IMGMode mode = mImage.getMode();
if (mode == IMGMode.NONE || mode == IMGMode.CLIP) {
handled |= onTouchNONE(event);
} else if (mPointerCount > 1) {
onPathDone();
handled |= onTouchNONE(event);
} else {
handled |= onTouchPath(event);
}
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mImage.onTouchDown(event.getX(), event.getY());
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mImage.onTouchUp(getScrollX(), getScrollY());
onHoming();
break;
}
return handled;
}
@sinhpn92
boolean onTouch(MotionEvent event) {
if (isHoming()) {
// Homing
return false;
}
mPointerCount = event.getPointerCount();
boolean handled = mSGDetector.onTouchEvent(event);
IMGMode mode = mImage.getMode();
if (mode == IMGMode.NONE || mode == IMGMode.CLIP) {
handled |= onTouchNONE(event);
} else if (mPointerCount > 1) {
if (event.getX() - downX >= scaledTouchSlop || event.getY() - downY >= scaledTouchSlop) {
onPathDone();
} else {
mPen.reset();
}
handled |= onTouchNONE(event);
} else {
handled |= onTouchPath(event);
}
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mImage.onTouchDown(event.getX(), event.getY());
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
mImage.onTouchUp(getScrollX(), getScrollY());
onHoming();
break;
}
return handled;
}
private boolean mNeedDraw;
private boolean onPathBegin(MotionEvent event) {
mNeedDraw = false;
mPen.reset(event.getX(), event.getY());
mPen.setIdentity(event.getPointerId(0));
return true;
}
private boolean onPathMove(MotionEvent event) {
if (mPen.isIdentity(event.getPointerId(0))) {
mNeedDraw = true;
mPen.lineTo(event.getX(), event.getY());
invalidate();
return true;
}
return false;
}
private boolean onPathDone() {
if (mPen.isEmpty()) {
return false;
}
if (mNeedDraw){
mNeedDraw = false;
mImage.addPath(mPen.toPath(), getScrollX(), getScrollY());
}
mPen.reset();
invalidate();
return true;
}