From ffc79f55782008ccc59a40a6109fe4995d0b75a9 Mon Sep 17 00:00:00 2001 From: Brian Pinsard Date: Sat, 14 Jan 2017 18:44:43 +0100 Subject: [PATCH] Implement changing brush size (saves in preferences) --- .../com/simplemobiletools/draw/Config.java | 8 +++ .../com/simplemobiletools/draw/Constants.java | 1 + .../com/simplemobiletools/draw/MyCanvas.java | 60 ++++++++++++++----- .../simplemobiletools/draw/PaintOptions.java | 17 ++++++ .../draw/activities/MainActivity.java | 23 +++++++ app/src/main/res/layout/activity_main.xml | 10 ++++ app/src/main/res/values/dimens.xml | 1 + 7 files changed, 105 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/com/simplemobiletools/draw/PaintOptions.java diff --git a/app/src/main/java/com/simplemobiletools/draw/Config.java b/app/src/main/java/com/simplemobiletools/draw/Config.java index 8bbfa34..92ce7b0 100644 --- a/app/src/main/java/com/simplemobiletools/draw/Config.java +++ b/app/src/main/java/com/simplemobiletools/draw/Config.java @@ -39,6 +39,14 @@ public class Config { mPrefs.edit().putInt(Constants.BRUSH_COLOR_KEY, color).apply(); } + public float getStrokeWidth() { + return mPrefs.getFloat(Constants.STROKE_WIDTH_KEY, 5.0f); + } + + public void setStrokeWidth(float strokeWidth) { + mPrefs.edit().putFloat(Constants.STROKE_WIDTH_KEY, strokeWidth).apply(); + } + public int getBackgroundColor() { return mPrefs.getInt(Constants.BACKGROUND_COLOR_KEY, Color.WHITE); } diff --git a/app/src/main/java/com/simplemobiletools/draw/Constants.java b/app/src/main/java/com/simplemobiletools/draw/Constants.java index 64f7709..306f373 100644 --- a/app/src/main/java/com/simplemobiletools/draw/Constants.java +++ b/app/src/main/java/com/simplemobiletools/draw/Constants.java @@ -4,6 +4,7 @@ public class Constants { // shared preferences public static final String PREFS_KEY = "Draw"; public static final String BRUSH_COLOR_KEY = "brush_color"; + public static final String STROKE_WIDTH_KEY = "stroke_width"; public static final String BACKGROUND_COLOR_KEY = "background_color"; public static final String IS_FIRST_RUN = "is_first_run"; public static final String IS_DARK_THEME = "is_dark_theme"; diff --git a/app/src/main/java/com/simplemobiletools/draw/MyCanvas.java b/app/src/main/java/com/simplemobiletools/draw/MyCanvas.java index 4c28e94..707cd84 100644 --- a/app/src/main/java/com/simplemobiletools/draw/MyCanvas.java +++ b/app/src/main/java/com/simplemobiletools/draw/MyCanvas.java @@ -17,29 +17,31 @@ import java.util.Map; public class MyCanvas extends View { private Paint mPaint; private MyPath mPath; - private Map mPaths; + private Map mPaths; private PathsChangedListener mListener; - private int mColor; + private PaintOptions mPaintOptions; private float mCurX; private float mCurY; private float mStartX; private float mStartY; + private boolean mIsSaving = false; public MyCanvas(Context context, AttributeSet attrs) { super(context, attrs); mPath = new MyPath(); mPaint = new Paint(); - mPaint.setColor(Color.BLACK); + mPaintOptions = new PaintOptions(); + mPaint.setColor(mPaintOptions.color); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); - mPaint.setStrokeWidth(5f); + mPaint.setStrokeWidth(mPaintOptions.strokeWidth); mPaint.setAntiAlias(true); mPaths = new LinkedHashMap<>(); - mPaths.put(mPath, mPaint.getColor()); + mPaths.put(mPath, mPaintOptions); pathsUpdated(); } @@ -62,14 +64,22 @@ public class MyCanvas extends View { } public void setColor(int newColor) { - mColor = newColor; + mPaintOptions.color = newColor; + invalidate(); + } + + public void setStrokeWidth(float newStrokeWidth){ + mPaintOptions.strokeWidth = newStrokeWidth; + invalidate(); } public Bitmap getBitmap() { final Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); final Canvas canvas = new Canvas(bitmap); canvas.drawColor(Color.WHITE); + mIsSaving = true; draw(canvas); + mIsSaving = false; return bitmap; } @@ -77,13 +87,30 @@ public class MyCanvas extends View { protected void onDraw(Canvas canvas) { super.onDraw(canvas); - for (Map.Entry entry : mPaths.entrySet()) { - mPaint.setColor(entry.getValue()); + for (Map.Entry entry : mPaths.entrySet()) { + changePaint(entry.getValue()); canvas.drawPath(entry.getKey(), mPaint); } - mPaint.setColor(mColor); + changePaint(mPaintOptions); canvas.drawPath(mPath, mPaint); + + if(!mIsSaving) { + drawPreviewDot(canvas); + } + } + + private void drawPreviewDot(Canvas canvas) { + mPaint.setColor(Utils.shouldUseWhite(mPaintOptions.color)?Color.WHITE:Color.BLACK); + mPaint.setStrokeWidth(100); + canvas.drawPoint(getWidth()/2, getHeight() - 100, mPaint); + changePaint(mPaintOptions); + canvas.drawPoint(getWidth()/2, getHeight() - 100, mPaint); + } + + private void changePaint(PaintOptions paintOptions) { + mPaint.setColor(paintOptions.color); + mPaint.setStrokeWidth(paintOptions.strokeWidth); } public void clearCanvas() { @@ -116,9 +143,10 @@ public class MyCanvas extends View { mPath.lineTo(mCurX + 1, mCurY); } - mPaths.put(mPath, mPaint.getColor()); + mPaths.put(mPath, mPaintOptions); pathsUpdated(); mPath = new MyPath(); + mPaintOptions = new PaintOptions(mPaintOptions.color, mPaintOptions.strokeWidth); } private void pathsUpdated() { @@ -179,7 +207,7 @@ public class MyCanvas extends View { } static class SavedState extends BaseSavedState { - Map mPaths; + Map mPaths; SavedState(Parcelable superState) { super(superState); @@ -189,9 +217,11 @@ public class MyCanvas extends View { public void writeToParcel(Parcel out, int flags) { super.writeToParcel(out, flags); out.writeInt(mPaths.size()); - for (Map.Entry entry : mPaths.entrySet()) { + for (Map.Entry entry : mPaths.entrySet()) { out.writeSerializable(entry.getKey()); - out.writeInt(entry.getValue()); + PaintOptions paintOptions = entry.getValue(); + out.writeInt(paintOptions.color); + out.writeFloat(paintOptions.strokeWidth); } } @@ -211,8 +241,8 @@ public class MyCanvas extends View { int size = in.readInt(); for (int i = 0; i < size; i++) { MyPath key = (MyPath) in.readSerializable(); - int value = in.readInt(); - mPaths.put(key, value); + PaintOptions paintOptions = new PaintOptions(in.readInt(), in.readFloat()); + mPaths.put(key, paintOptions); } } } diff --git a/app/src/main/java/com/simplemobiletools/draw/PaintOptions.java b/app/src/main/java/com/simplemobiletools/draw/PaintOptions.java new file mode 100644 index 0000000..4a72bdd --- /dev/null +++ b/app/src/main/java/com/simplemobiletools/draw/PaintOptions.java @@ -0,0 +1,17 @@ +package com.simplemobiletools.draw; + +import android.graphics.Color; + +class PaintOptions { + int color = Color.BLACK; + float strokeWidth = 5f; + + PaintOptions() { + //Empty constructor for instantiating with default values + } + + PaintOptions(int color, float strokeWidth) { + this.color = color; + this.strokeWidth = strokeWidth; + } +} diff --git a/app/src/main/java/com/simplemobiletools/draw/activities/MainActivity.java b/app/src/main/java/com/simplemobiletools/draw/activities/MainActivity.java index e3775de..325f3c8 100644 --- a/app/src/main/java/com/simplemobiletools/draw/activities/MainActivity.java +++ b/app/src/main/java/com/simplemobiletools/draw/activities/MainActivity.java @@ -19,6 +19,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.ImageView; +import android.widget.SeekBar; import android.widget.Toast; import com.simplemobiletools.draw.Config; @@ -46,10 +47,12 @@ public class MainActivity extends SimpleActivity implements MyCanvas.PathsChange @BindView(R.id.my_canvas) MyCanvas mMyCanvas; @BindView(R.id.undo) View mUndoBtn; @BindView(R.id.color_picker) View mColorPicker; + @BindView(R.id.stroke_width_bar) SeekBar mStrokeWidthBar; private String curFileName; private int color; + private float strokeWidth; @Override protected void onCreate(Bundle savedInstanceState) { @@ -57,15 +60,21 @@ public class MainActivity extends SimpleActivity implements MyCanvas.PathsChange setContentView(R.layout.activity_main); ButterKnife.bind(this); mMyCanvas.setListener(this); + mStrokeWidthBar.setOnSeekBarChangeListener(onStrokeWidthBarChangeListener); setBackgroundColor(mConfig.getBackgroundColor()); setColor(mConfig.getBrushColor()); + + float savedStrokeWidth = mConfig.getStrokeWidth(); + mMyCanvas.setStrokeWidth(savedStrokeWidth); + mStrokeWidthBar.setProgress((int) savedStrokeWidth); } @Override protected void onPause() { super.onPause(); mConfig.setBrushColor(color); + mConfig.setStrokeWidth(strokeWidth); } @Override @@ -290,4 +299,18 @@ public class MainActivity extends SimpleActivity implements MyCanvas.PathsChange public void pathsChanged(int cnt) { mUndoBtn.setVisibility(cnt > 0 ? View.VISIBLE : View.GONE); } + + SeekBar.OnSeekBarChangeListener onStrokeWidthBarChangeListener = new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + mMyCanvas.setStrokeWidth(progress); + strokeWidth = progress; + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { } + }; } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index ab8c976..b2ded39 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -26,4 +26,14 @@ android:src="@mipmap/undo_black" android:visibility="gone"/> + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 23c2330..fcef010 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -5,6 +5,7 @@ 8dp 40dp 8dp + 150dp 14sp