我使用以下代码来处理resize(pinch)
事件在android:
//my custom framelayout supporting resize functionality
ScalingFrameLayout pieceContainer=(ScalingFrameLayout)fragment.getView().findViewById(R.id.pieceContainer);
//set onResize handler
setScaleListener(pieceContainer.getContext());
//tonnel touch events to gesture detector
pieceContainer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mScaleDetector.onTouchEvent(event);
return true;
}
});
...
//somewhere in the class
private ScaleGestureDetector mScaleDetector;
//
private void setScaleListener(Context context) {
mScaleDetector= new ScaleGestureDetector(context, new ScaleGestureDetector.OnScaleGestureListener() {
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
Log.d("onScaleEnd", "end");
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
Log.d("onScaleBegin", "begin");
return true;
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
Log.d("onScale", "zoom ongoing, scale: " + detector.getScaleFactor());
return false;
}
});
}
问题是,当我做放大手势(例如)这个代码调用onScaleBegin
,然后5-6次onScale
,最终它调用onScaleEnd
。虽然我没有把手指从屏幕上移开。是否有办法防止ScaleGestureDetector
调用onScaleEnd
,并使其保持跟踪我的缩放手势,直到我释放屏幕?
这个问题可以通过在framayout的基础上实现自定义双向滚动视图来解决。