最近發現一個非常好的 裁剪器,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安裝包、不支援縮放改動