SimpleCropView 裁剪图片
16lz
2021-01-24
最近发现一个非常好的 裁剪器,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安装包、不支持缩放改动
更多相关文章
- android:windowSoftInputMode属性详解以及editText监听键盘回车
- SQLite
- Android在标准linux基础上对休眠唤醒的实现(二)
- Android屏幕截图之View方法
- Android(安卓)Asynchronous Http Client-Android异步网络请求客
- android之蓝牙开发续(自动配对)
- Android启动画面的实现方法
- Android培训班(9)
- android 一键锁屏 开发