Add mock part addition/deletion mechanism.
This commit is contained in:
parent
cd6b7c87d6
commit
5e583bed05
@ -1,5 +1,6 @@
|
|||||||
package com.codigoparallevar.minicards;
|
package com.codigoparallevar.minicards;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
@ -16,6 +17,7 @@ import com.codigoparallevar.minicards.parts.Part;
|
|||||||
import com.codigoparallevar.minicards.parts.Placeholder;
|
import com.codigoparallevar.minicards.parts.Placeholder;
|
||||||
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
||||||
import com.codigoparallevar.minicards.parts.types.Position;
|
import com.codigoparallevar.minicards.parts.types.Position;
|
||||||
|
import com.getbase.floatingactionbutton.FloatingActionsMenu;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
@ -47,6 +49,9 @@ class CanvasView extends View {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private String name = "default";
|
private String name = "default";
|
||||||
private final static float touchTimeForLongTouchInMillis = 500;
|
private final static float touchTimeForLongTouchInMillis = 500;
|
||||||
|
private boolean _isDragging = false;
|
||||||
|
private MainActivity parentActivity = null;
|
||||||
|
private Tuple<Integer, Integer, Integer, Integer> _dropZone = new Tuple<>(0, 0, 0, 0);
|
||||||
|
|
||||||
public CanvasView(Context context) {
|
public CanvasView(Context context) {
|
||||||
super(context);
|
super(context);
|
||||||
@ -173,7 +178,16 @@ class CanvasView extends View {
|
|||||||
selectedPart.touched();
|
selectedPart.touched();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (motionMode == MotionMode.Type.LongTouch) {
|
||||||
|
if (selectedPart != null) {
|
||||||
|
if (inDropZone(x, y)) {
|
||||||
|
Log.d("Canvas", "Deleting element" + selectedPart);
|
||||||
|
parts.remove(selectedPart);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_isDragging = false;
|
||||||
motionMode = null;
|
motionMode = null;
|
||||||
selectedPart = null;
|
selectedPart = null;
|
||||||
}
|
}
|
||||||
@ -186,6 +200,8 @@ class CanvasView extends View {
|
|||||||
|
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
{
|
{
|
||||||
|
Log.i("Canvas", "X: " + x + " Y: " + y
|
||||||
|
+ " in drop zone " + _dropZone + " : " + inDropZone(x, y));
|
||||||
if (motionMode == null){
|
if (motionMode == null){
|
||||||
final Part nowSelectedPart = getPartOn(x, y);
|
final Part nowSelectedPart = getPartOn(x, y);
|
||||||
final boolean canWait = selectedPart == nowSelectedPart;
|
final boolean canWait = selectedPart == nowSelectedPart;
|
||||||
@ -193,6 +209,7 @@ class CanvasView extends View {
|
|||||||
}
|
}
|
||||||
if (motionMode == MotionMode.Type.LongTouch){
|
if (motionMode == MotionMode.Type.LongTouch){
|
||||||
if (selectedPart != null){
|
if (selectedPart != null){
|
||||||
|
_isDragging = true;
|
||||||
selectedPart.move(x, y);
|
selectedPart.move(x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,9 +223,17 @@ class CanvasView extends View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
invalidate();
|
invalidate();
|
||||||
|
if (parentActivity != null) {
|
||||||
|
parentActivity.invalidate();
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean inDropZone(int x, int y) {
|
||||||
|
return (x >= _dropZone._x1) && (x <= _dropZone._x2)
|
||||||
|
&& (y >= _dropZone._y1) && (y <= _dropZone._y2);
|
||||||
|
}
|
||||||
|
|
||||||
private void saveState() throws IOException {
|
private void saveState() throws IOException {
|
||||||
File filesDir = getContext().getFilesDir();
|
File filesDir = getContext().getFilesDir();
|
||||||
FileOutputStream fileOut = new FileOutputStream(filesDir + "/" + name);
|
FileOutputStream fileOut = new FileOutputStream(filesDir + "/" + name);
|
||||||
@ -270,4 +295,36 @@ class CanvasView extends View {
|
|||||||
parts.add(part);
|
parts.add(part);
|
||||||
invalidate();
|
invalidate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDragging() {
|
||||||
|
return _isDragging;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setParentActivity(MainActivity parentActivity) {
|
||||||
|
this.parentActivity = parentActivity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDropZone(float x1, float x2, float y1, float y2) {
|
||||||
|
_dropZone = new Tuple<>((int) x1, (int) x2, (int) y1, (int) y2);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Tuple<T, T1, T2, T3> {
|
||||||
|
|
||||||
|
final T _x1;
|
||||||
|
final T1 _x2;
|
||||||
|
final T2 _y1;
|
||||||
|
final T3 _y2;
|
||||||
|
|
||||||
|
public Tuple(T x1, T1 x2, T2 y1, T3 y2) {
|
||||||
|
_x1 = x1;
|
||||||
|
_x2 = x2;
|
||||||
|
_y1 = y1;
|
||||||
|
_y2 = y2;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "(" + _x1 + " - " + _x2 + ", " + _y1 + " - " + _y2 + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.codigoparallevar.minicards;
|
package com.codigoparallevar.minicards;
|
||||||
|
|
||||||
import android.graphics.Canvas;
|
|
||||||
import android.support.design.widget.FloatingActionButton;
|
import android.support.design.widget.FloatingActionButton;
|
||||||
import android.support.design.widget.Snackbar;
|
import android.support.design.widget.Snackbar;
|
||||||
import android.support.v7.app.ActionBar;
|
import android.support.v7.app.ActionBar;
|
||||||
@ -9,16 +8,16 @@ import android.os.Bundle;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
|
||||||
|
|
||||||
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
|
||||||
import com.getbase.floatingactionbutton.AddFloatingActionButton;
|
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity {
|
public class MainActivity extends AppCompatActivity {
|
||||||
|
|
||||||
CanvasView canvasView;
|
CanvasView canvasView;
|
||||||
com.getbase.floatingactionbutton.AddFloatingActionButton AddPartButton;
|
com.getbase.floatingactionbutton.AddFloatingActionButton AddPartButton;
|
||||||
com.getbase.floatingactionbutton.FloatingActionButton SetDevModeButton;
|
com.getbase.floatingactionbutton.FloatingActionButton SetDevModeButton;
|
||||||
|
com.getbase.floatingactionbutton.FloatingActionsMenu fabMenu;
|
||||||
|
FloatingActionButton removePartFab;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -34,13 +33,25 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
// Use manually controlled canvas
|
// Use manually controlled canvas
|
||||||
canvasView = (CanvasView) findViewById(R.id.canvasView);
|
canvasView = (CanvasView) findViewById(R.id.canvasView);
|
||||||
|
canvasView.setParentActivity(this);
|
||||||
|
|
||||||
|
removePartFab = (FloatingActionButton) findViewById(R.id.remove_part_fab);
|
||||||
|
canvasView.setDropZone(
|
||||||
|
removePartFab.getX(), removePartFab.getX() + removePartFab.getWidth(),
|
||||||
|
removePartFab.getY(), removePartFab.getY() + removePartFab.getHeight());
|
||||||
|
|
||||||
// Set callbacks to fab buttons
|
// Set callbacks to fab buttons
|
||||||
|
fabMenu = (com.getbase.floatingactionbutton.FloatingActionsMenu)
|
||||||
|
findViewById(R.id.fab);
|
||||||
|
|
||||||
AddPartButton = (com.getbase.floatingactionbutton.AddFloatingActionButton)
|
AddPartButton = (com.getbase.floatingactionbutton.AddFloatingActionButton)
|
||||||
findViewById(R.id.add_part_button);
|
findViewById(R.id.add_part_button);
|
||||||
AddPartButton.setOnClickListener(new View.OnClickListener() {
|
AddPartButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
if (canvasView != null) {
|
||||||
|
canvasView.addPart(new RoundButton(500, 500, 50, 100));
|
||||||
|
}
|
||||||
Snackbar.make(v, "Add part", Snackbar.LENGTH_SHORT).show();
|
Snackbar.make(v, "Add part", Snackbar.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -65,4 +76,22 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
return super.onTouchEvent(event);
|
return super.onTouchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void invalidate() {
|
||||||
|
if (canvasView != null){
|
||||||
|
if (canvasView.isDragging()){
|
||||||
|
fabMenu.setVisibility(View.GONE);
|
||||||
|
removePartFab.setVisibility(View.VISIBLE);
|
||||||
|
Log.d("Main", "Changing visibility!");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fabMenu.setVisibility(View.VISIBLE);
|
||||||
|
removePartFab.setVisibility(View.GONE);
|
||||||
|
Log.d("Main", "Now changing visibility!");
|
||||||
|
}
|
||||||
|
canvasView.setDropZone(
|
||||||
|
removePartFab.getX(), removePartFab.getX() + removePartFab.getWidth(),
|
||||||
|
removePartFab.getY(), removePartFab.getY() + removePartFab.getHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,16 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<android.support.design.widget.FloatingActionButton
|
||||||
|
android:id="@+id/remove_part_fab"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|end"
|
||||||
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:background="@color/white"
|
||||||
|
app:srcCompat="@android:drawable/ic_delete" />
|
||||||
|
|
||||||
<com.getbase.floatingactionbutton.FloatingActionsMenu
|
<com.getbase.floatingactionbutton.FloatingActionsMenu
|
||||||
android:id="@+id/fab"
|
android:id="@+id/fab"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
Loading…
Reference in New Issue
Block a user