Как сделать текст перетаскиваемым по изображению в Android? - PullRequest
0 голосов
/ 28 сентября 2019

Я разрабатываю приложение для создания мемов в Android. Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть два поля подписей (одно сверху и другое снизу) на моем изображении, чтобы создать мем. Что мне нужно, так это то, что я хочу сделать этотекстовое поле заголовка плавно перетаскивается на моем изображении. Вот скриншот моей страницы . Я уже пробовал перетаскиваемую функцию, но достигнут ожидаемый вывод. Любая помощь приветствуется. Спасибо. Ниже приведен код моего приложенияэкран.

         import android.graphics.Bitmap;


       import java.io.Serializable;
     import java.util.ArrayList;
     import java.util.List;

  import static net.gsantner.memetastic.data.MemeConfig.Point;

   /**
    * A memes settings
     */
  @SuppressWarnings({"unused", "WeakerAccess"})   
 public class MemeEditorElements implements Serializable {
private List<EditorCaption> _captions;
private EditorImage _imageMain; // There MUST be always top and bottom caption

public MemeEditorElements(MemeData.Font font, Bitmap image) {
    _captions = new ArrayList<>();
    _captions.add(new EditorCaption(font, MemeConfig.Caption.TYPE_TOP));
    _captions.add(new EditorCaption(font, MemeConfig.Caption.TYPE_BOTTOM));
    _imageMain = new EditorImage(image);
}

public EditorImage getImageMain() {
    return _imageMain;
}

public void setImageMain(EditorImage imageMain) {
    _imageMain = imageMain;
}

public List<EditorCaption> getCaptions() {
    return _captions;
}

public EditorCaption getCaptionTop() {
    for (EditorCaption caption : _captions) {
        if (caption.getCaptionConf().getPositionType() == MemeConfig.Caption.TYPE_TOP) {
            return caption;
        }
    }
    return null;
}

public EditorCaption getCaptionBottom() {
    for (EditorCaption caption : _captions) {
        if (caption.getCaptionConf().getPositionType() == MemeConfig.Caption.TYPE_BOTTOM) {
            return caption;
        }
    }
    return null;
}

public void setFontToAll(MemeData.Font font) {
    for (EditorCaption caption : _captions) {
        caption.setFont(font);
    }
}

public static class EditorCaption implements Serializable {
    private MemeConfig.Caption _captionConf;
    private MemeData.Font _font = null; // !serializable

    private int _fontSize = MemeLibConfig.FONT_SIZES.DEFAULT;
    private int _textColor = MemeLibConfig.MEME_COLORS.DEFAULT_TEXT;
    private int _borderColor = MemeLibConfig.MEME_COLORS.DEFAULT_BORDER;
    private boolean _allCaps = true;
    private String _text = "";

    public EditorCaption(MemeData.Font font, int positionType) {
        _font = font;

        // TODO: Really load this from config if possible
        _captionConf = new MemeConfig.Caption();
        _captionConf.setPositionType(positionType);
        _captionConf.setText("");
        // end to-do
        _text = _captionConf.getText();
    }

    public EditorCaption(MemeData.Font font, MemeConfig.Caption captionConf) {
        _font = font;
        _captionConf = captionConf;
    }

    public MemeData.Font getFont() {
        return _font;
    }

    public void setFont(MemeData.Font font) {
        _font = font;
    }

    public int getFontSize() {
        return _fontSize;
    }

    public void setFontSize(int fontSize) {
        _fontSize = fontSize;
    }

    public Point getPositionInCanvas(float width, float height, float textWidth, float textHeight) {
        switch (_captionConf.getPositionType()) {
            case MemeConfig.Caption.TYPE_CUSTOM:
            default: {
                Point point = _captionConf.getPosition();
                if (point == null) {
                    point = new Point(0.5f, 0.5f);
                }
                return new Point(
                        width * point.getX() - textWidth * 0.5f,
                        height * point.getY() - textHeight * 0.5f);
            }

            case MemeConfig.Caption.TYPE_TOP:
                return new Point((width - textWidth) * 0.5f, height / 15f);

            case MemeConfig.Caption.TYPE_BOTTOM:
                return new Point((width - textWidth) * 0.5f, height - textHeight);
        }
    }

    public int getTextColor() {
        return _textColor;
    }

    public void setTextColor(int textColor) {
        _textColor = textColor;
    }

    public int getBorderColor() {
        return _borderColor;
    }

    public void setBorderColor(int borderColor) {
        _borderColor = borderColor;
    }

    public boolean isAllCaps() {
        return _allCaps;
    }

    public void setAllCaps(boolean allCaps) {
        _allCaps = allCaps;
    }

    public String getText() {
        return _text;
    }

    public void setText(String text) {
        _text = text;
    }

    @Override
    public String toString() {
        return _captionConf.getText();
    }

    public MemeConfig.Caption getCaptionConf() {
        return _captionConf;
    }

    public void setImgText(MemeConfig.Caption captionConf) {
        _captionConf = captionConf;
    }
}


public static class EditorImage implements Serializable {
    private Bitmap _image = null;
    private Bitmap _displayImage = null;
    private boolean _isTextSettingsGlobal = true;
    private int _rotationDeg = 0;
    private int _padding = 0;
    private int _paddingColor = MemeLibConfig.MEME_COLORS.WHITE;

    public EditorImage(Bitmap image) {
        _image = image;
    }

    public Bitmap getImage() {
        return _image;
    }

    public void setImage(Bitmap image) {
        _image = image;
    }

    public Bitmap getDisplayImage() {
        return _displayImage;
    }

    public void setDisplayImage(Bitmap displayImage) {
        _displayImage = displayImage;
    }

    public int getRotationDeg() {
        return _rotationDeg;
    }

    public void setRotationDeg(int rotationDeg) {
        _rotationDeg = rotationDeg;
    }

    public boolean isTextSettingsGlobal() {
        return _isTextSettingsGlobal;
    }

    public void setTextSettingsGlobal(boolean v) {
        _isTextSettingsGlobal = v;
    }

    public int getPadding() {
        return _padding;
    }

    /**
     * Set the _padding of the picture. A value of 10 means the picture is grown by 10
     * percent (size * 1.1) and the background filled with _paddingColor
     *
     * @param padding _padding
     */
    public void setPadding(int padding) {
        _padding = padding;
    }

    public int getPaddingColor() {
        return _paddingColor;
    }

    /**
     * Set the color to be used for _padding background. See _padding
     *
     * @param paddingColor the color
     */
    public void setPaddingColor(int paddingColor) {
        _paddingColor = paddingColor;
    }
}

}
...