最近发现一个非常好的 裁剪器,SimpleCropView. 满足各种需求、据此记录。
Github:SimpleCropView
1.支持各种比例的裁剪
项目有这么一个需求,定义好裁剪框大小、不允许改变大小、并且在图片范围类移动,并且裁剪。
所以小小的改动了如下:
在初始化CropView的时候、加上这个几个属性
mCropView = (CropImageView) findViewById(R.id.cropImageView); mCropView.setMinFrameSizeInDp(100); mCropView.setHandleShowMode(CropImageView.ShowMode.NOT_SHOW); //不显示点 mCropView.setGuideShowMode(CropImageView.ShowMode.NOT_SHOW); //不显示线(内部虚线) mCropView.setmIsScaling(false); //自定义一个属性,不支持缩放
然后在到CropImageView源码中阻止缩放手势、应为在初始化的时候加了一个 boolean mIsScaling变量标识。
在onMove方法中、有对应的 内容、左上、右上、左下、右下,4个触摸点屏蔽,当然这里最好不要屏蔽代码(这样也可以,只是太暴力 )、我们可以用 mIsScaling 标识列来判别,是否执行.
private void onMove(MotionEvent e) { float diffX = e.getX() - mLastX; float diffY = e.getY() - mLastY; switch (mTouchArea) { case CENTER: moveFrame(diffX, diffY); break; case LEFT_TOP: moveHandleLT(diffX, diffY); break; case RIGHT_TOP: moveHandleRT(diffX, diffY); break; case LEFT_BOTTOM: moveHandleLB(diffX, diffY); break; case RIGHT_BOTTOM: moveHandleRB(diffX, diffY); break; case OUT_OF_BOUNDS: break; } invalidate(); mLastX = e.getX(); mLastY = e.getY(); }
在对应的moveHandleLt(diffX,diffY)... 的方法 第一行 中加上判断就ok。
private void moveHandleLT(float diffX, float diffY) { if(!mIsScaling)return; if (mCropMode == CropMode.RATIO_FREE) { mFrameRect.left += diffX; mFrameRect.top += diffY; if (isWidthTooSmall()) { float offsetX = mMinFrameSize - getFrameW(); mFrameRect.left -= offsetX; } if (isHeightTooSmall()) { float offsetY = mMinFrameSize - getFrameH(); mFrameRect.top -= offsetY; } checkScaleBounds();
别忘记有4个方法。.....
传送门:SimpleCropView源码、APk安装包、不支持缩放改动