diff --git a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/LayersRest.java b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/LayersRest.java index 028a4b8..0cf0a27 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/LayersRest.java +++ b/app/src/main/java/org/ntlab/acanthus_client/resources/gallery/LayersRest.java @@ -1,4 +1,13 @@ package org.ntlab.acanthus_client.resources.gallery; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Path; + public interface LayersRest { + //----------------------------------------------------------------- + // + @GET("gallery/{aid}/pageMap/{pid}/layers/{layerNo}") + Call getStrokeSize( + @Path("aid") Integer aid, @Path("pid") Integer pid, @Path("layerNo") Integer layerNo); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java index 5d96119..ed8e222 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintCanvas.java @@ -6,6 +6,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.util.AttributeSet; +import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -81,21 +82,26 @@ float x = event.getX(); float y = event.getY(); + //(3-2)タッチの処理 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: + Log.d("motion", "+++++++++++++++++++++++++++++++++++++++down======================================================"); onTouched(x, y); + paintViewModel.addLocalStrokeRequest(); break; case MotionEvent.ACTION_MOVE: + Log.d("motion", "move"); onTouchedMove(x, y); + paintViewModel.addPositionRequest(x, y); break; case MotionEvent.ACTION_UP: + Log.d("motion", "=====================================up======================================================"); break; } - paintViewModel.drawStrokeRequest(event); return true; } @@ -112,6 +118,7 @@ //----------------------------------------------------------------- // 押した瞬間の処理 private void onTouched(float x, float y) { + path = new Path(); path.moveTo(x, y); invalidate(); } @@ -127,6 +134,7 @@ //----------------------------------------------------------------- // 押した瞬間の処理 private void onTouched2(float x, float y) { + path2 = new Path(); path2.moveTo(x, y); invalidate(); } @@ -137,19 +145,20 @@ path2.lineTo(x, y); invalidate(); } + //描写するための取得 - public void getCanvas(){ - int cnt=0; - for (Stroke s : paintViewModel.getStroke().getValue()) { - for (Position p : s.getPositions()) { - if (cnt == 0) { - onTouched2(p.getX(), p.getY()); - } else { - onTouchedMove2(p.getX(), p.getY()); - } - cnt++; + public void getCanvas() { + int cnt = 0; + for (Stroke s : paintViewModel.getStroke().getValue()) { + for (Position p : s.getPositions()) { + if (cnt == 0) { + onTouched2(p.getX(), p.getY()); + } else { + onTouchedMove2(p.getX(), p.getY()); } - cnt = 0; + cnt++; } + cnt = 0; } + } } \ No newline at end of file diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java index b2ae71d..950c028 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintViewModel.java @@ -2,6 +2,7 @@ import android.util.Log; import android.view.MotionEvent; +import android.view.VelocityTracker; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -24,8 +25,8 @@ private PaintModelContainer paintModelContainer; - private MutableLiveData> paintPosition; private MutableLiveData mPageNo = new MutableLiveData<>(); + private MutableLiveData mStrokeNo = new MutableLiveData<>(); private MutableLiveData> mStrokes = new MutableLiveData<>(); private ScheduledThreadPoolExecutor thread = new ScheduledThreadPoolExecutor(1); @@ -36,6 +37,10 @@ return this.mStrokes; } + public LiveData getStrokeNo() { + return this.mStrokeNo; + } + public LiveData getPageNo() { return this.mPageNo; } @@ -47,28 +52,21 @@ paintModelContainer = new PaintModelContainer(acanthus); paintModelContainer.getPaintConnectionModel().init(acanthus); paintModelContainer.getInvitesConnectionModel().init(acanthus); - paintPosition = new MutableLiveData<>(); - mStrokes = new MutableLiveData<>(); + mStrokes.setValue(new ArrayList<>()); mStrokes.getValue().add(new Stroke()); + thread.scheduleWithFixedDelay(this, 1000L, 100L, TimeUnit.MICROSECONDS); } //----------------------------------------------------------------- // 描画APIの通信リクエスト - public void drawStrokeRequest(@NotNull MotionEvent motionEvent) { - float x = motionEvent.getX(); - float y = motionEvent.getY(); + public void addLocalStrokeRequest() { + paintModelContainer.getPaintConnectionModel().addLocalStroke(mStrokeNo); + } - switch (motionEvent.getAction()) { - case MotionEvent.ACTION_DOWN: - paintModelContainer.getPaintConnectionModel().addLocalStroke(); - break; - - case MotionEvent.ACTION_MOVE: - paintModelContainer.getPaintConnectionModel().addPosition(x, y); - break; - } + public void addPositionRequest(float x, float y) { + paintModelContainer.getPaintConnectionModel().addPosition(x, y, mStrokeNo); } //----------------------------------------------------------------- @@ -93,8 +91,9 @@ // 一定間隔でサーバー上の筆跡を取得する(GET) @Override public void run() { - Log.d("debug", "run: "); - paintModelContainer.getPaintConnectionModel().getStrokeSize(mStrokes); +// Log.d("debug", "run: "); + paintModelContainer.getPaintConnectionModel().getStrokes(mStrokes); + paintModelContainer.getPaintConnectionModel().getStrokeNo(mStrokeNo); //paintModelContainer.getPaintConnectionModel().apiGetPosition(paintPosition,i); } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java index bfcb33a..c001c50 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/models/PaintConnectionModel.java @@ -1,7 +1,9 @@ package org.ntlab.acanthus_client.views.paint.models; import android.util.Log; +import android.view.VelocityTracker; +import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.navigation.ActivityNavigator; @@ -10,9 +12,11 @@ import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; import org.ntlab.acanthus_client.resources.gallery.GalleryRest; +import org.ntlab.acanthus_client.resources.gallery.LayersRest; import org.ntlab.acanthus_client.resources.gallery.StrokesRest; import java.lang.reflect.Array; +import java.net.Inet4Address; import java.util.ArrayList; import java.util.Collection; @@ -27,10 +31,8 @@ // 描画通信 public class PaintConnectionModel { private Animation editedAnimation; - private Integer currentStrokeNo; private Retrofit retrofit; private Acanthus acanthus; - private Collection getPaint; //----------------------------------------------------------------- //----------------------------------------------------------------- @@ -45,16 +47,11 @@ this.editedAnimation = editedAnimation; } - private void setCurrentStrokeNo(int strokeNo) { - this.currentStrokeNo = strokeNo; - } - //----------------------------------------------------------------- //----------------------------------------------------------------- // init public void init(Acanthus acanthus) { this.acanthus = acanthus; - this.getPaint = new ArrayList(); this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/acanthus/") .addConverterFactory(ScalarsConverterFactory.create()) @@ -65,9 +62,10 @@ //----------------------------------------------------------------- //----------------------------------------------------------------- // ローカルでのストロークの追加(POST) - public void addLocalStroke() { + public void addLocalStroke(MutableLiveData mStrokeNo) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + Log.d("strokeNo:", "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^add----------------------"); //----------------------------------------------------------------- // ストローク追加API Call call = strokesRest.addStroke( @@ -78,7 +76,7 @@ call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { - if (response.isSuccessful()) setCurrentStrokeNo(response.body()); + if (response.isSuccessful()) mStrokeNo.setValue(response.body()); } @Override @@ -90,12 +88,14 @@ //----------------------------------------------------------------- // ローカルでの筆跡追加(POST) - public void addPosition(float x, float y) { + public void addPosition(float x, float y, LiveData currentStrokeNo) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); + Log.d("strokeNo:", currentStrokeNo.getValue().toString()); + //----------------------------------------------------------------- - // 筆跡追加API - Call call = strokesRest.addPositions(acanthus.getAid(), this.currentStrokeNo, x, y); + // 座標追加 + Call call = strokesRest.addPositions(acanthus.getAid(), currentStrokeNo.getValue(), x, y); call.enqueue(new Callback() { @Override public void onResponse(Call call, Response response) { @@ -110,30 +110,8 @@ } //----------------------------------------------------------------- - //Getを追加 - public void apiGetPosition(MutableLiveData> paintPosition, int num) { - final StrokesRest strokesRest = retrofit.create(StrokesRest.class); - - //----------------------------------------------------------------- - // 筆跡追加API - Call> call = strokesRest.getPositions(acanthus.getAid(), num); - call.enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.isSuccessful()) paintPosition.setValue(response.body()); - } - - @Override - public void onFailure(Call> call, Throwable t) { - - } - }); - - } - - //----------------------------------------------------------------- - //Getを追加 - public void getStrokeSize(MutableLiveData> strokes) { + // 全strokeを取得する + public void getStrokes(MutableLiveData> strokes) { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); //----------------------------------------------------------------- @@ -154,6 +132,27 @@ } //----------------------------------------------------------------- + // + public void getStrokeNo(MutableLiveData mStrokeNo) { + final LayersRest layersRest = retrofit.create(LayersRest.class); + + //----------------------------------------------------------------- + // 現在の筆跡番号の取得 + Call call = layersRest.getStrokeSize(acanthus.getAid(), 0, 0); + call.enqueue(new Callback() { + @Override + public void onResponse(Call call, Response response) { + if (response.isSuccessful()) mStrokeNo.setValue(response.body()); + } + + @Override + public void onFailure(Call call, Throwable t) { + + } + }); + } + + //----------------------------------------------------------------- // "Clear"ボタンによる描画の全消去 / サーバー側の筆跡全削除 public void deleteStrokes() { final StrokesRest strokesRest = retrofit.create(StrokesRest.class); diff --git a/app/src/main/res/layout/fragment_edit.xml b/app/src/main/res/layout/fragment_edit.xml index dc9dbf2..7cc2d6a 100644 --- a/app/src/main/res/layout/fragment_edit.xml +++ b/app/src/main/res/layout/fragment_edit.xml @@ -10,25 +10,27 @@ android:id="@+id/Paint_button" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="4dp" android:text="Button" + app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintHorizontal_bias="0.687" + app:layout_constraintHorizontal_bias="0.665" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.231" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.234" /> + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.231" /> \ No newline at end of file