Imaging
Imaging copied to clipboard
您好,请问下裁剪功能 ,如何能比例限制
追问,我也是想问这个问题,如何始终保持正方形剪切
这个功能和微信一样,没有支持正方形,以及制定比例的裁剪功能
我研究了下源码可以这样设置比例,如下还未验证希望高手指导一下是否正确 1.创建config配置文件
package me.minetsh.imaging;
public class IMGConfig {
private static IMGConfig mInstance;
private boolean isSave;
public CropMode cropMode = CropMode.SQUARE;
private IMGConfig() {
}
public static IMGConfig getInstance() {
if (mInstance == null) {
synchronized (IMGConfig.class) {
if (mInstance == null) {
mInstance = new IMGConfig();
}
}
}
return mInstance;
}
public void setCropMode(CropMode mode) {
this.cropMode = mode;
}
public enum CropMode {
RATIO_4_3(1),
RATIO_3_4(2),
SQUARE(3),
RATIO_16_9(4),
RATIO_9_16(5),
FREE(6);
private final int ID;
CropMode(final int id) {
this.ID = id;
}
public int getId() {
return ID;
}
}
}
2.在IMGClipWindow.java的 private void reset(float clipWidth, float clipHeight)方法下添加如下代码(更多比例自行添加)
/**
* 重置裁剪
*/
private void reset(float clipWidth, float clipHeight) {
setResetting(true);
//处理裁剪模式
if (IMGConfig.getInstance().cropMode == IMGConfig.CropMode.FREE) {
//自由模式
mFrame.set(0, 0, clipWidth, clipHeight);
} else if (IMGConfig.getInstance().cropMode == IMGConfig.CropMode.SQUARE) {
//正方形
mFrame.set(0, 0, Math.min(clipWidth, clipHeight), Math.min(clipWidth, clipHeight));
}
IMGUtils.fitCenter(mWinFrame, mFrame, CLIP_MARGIN);
mTargetFrame.set(mFrame);
}
3.在IMGimage.java的onTouchDown方法中添加如下代码或修改为如下
public void onTouchDown(float x, float y) {
isSteady = false;
moveToBackground(mForeSticker);
if (mMode == IMGMode.CLIP && IMGConfig.getInstance().cropMode == IMGConfig.CropMode.FREE) {
//只有裁剪模式下并且自由裁剪才可以拖动
mAnchor = mClipWin.getAnchor(x, y);
}
}
4.使用裁剪功能前调用IMGConfig设置cropMode即可
5.本人还未验证是否会产生其他BUG 只是提供一下我的思路