minetsh / Imaging

Android Image Edit Lib. Android 图片编辑库,微信图片编辑库

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

您好,请问下裁剪功能 ,如何能比例限制

zhengqiyao93 opened this issue · comments

commented

追问,我也是想问这个问题,如何始终保持正方形剪切

commented

这个功能和微信一样,没有支持正方形,以及制定比例的裁剪功能

commented

我研究了下源码可以这样设置比例,如下还未验证希望高手指导一下是否正确
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 只是提供一下我的思路