diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java index 6512913..89c2dea 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingActivity.java @@ -6,9 +6,12 @@ import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Color; import android.os.Bundle; import android.view.View; +import android.widget.CompoundButton; import android.widget.TextView; +import android.widget.ToggleButton; import org.ntlab.irisclient.models.Member; import org.ntlab.irisclient.viewmodels.DrawingStateViewModel; @@ -37,9 +40,35 @@ drawingStateViewModel= new ViewModelProvider(this).get(DrawingStateViewModel.class); - findViewById(R.id.okButtton).setOnClickListener(this);//お絵描き終了ボタン findViewById(R.id.clearButton).setOnClickListener(this);//画面クリアボタン findViewById(R.id.eraserButton).setOnClickListener(this);//消しゴムボタン + findViewById(R.id.blackPenButton).setOnClickListener(this);//消しゴムボタン + + ToggleButton okToggleButton = (ToggleButton) findViewById(R.id.toggleButton); + okToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked) { + okToggleButton.setTextOn("完了"); + drawingCanvas.setEnabled(true); + drawingCanvas.setClickable(true); + drawingCanvas.setColor(Color.BLACK); + + } else { + okToggleButton.setTextOff("描き直す"); + drawingCanvas.setEnabled(false); + drawingCanvas.setClickable(false); + drawingCanvas.setColor(Color.TRANSPARENT); + + //putDrawing + drawingCanvas.setDrawingCacheEnabled(true);//キャッシュを取得する設定にする + drawingCanvas.buildDrawingCache(); + Bitmap bitmap = Bitmap.createBitmap(drawingCanvas.getDrawingCache()); + drawingCanvas.destroyDrawingCache();//既存のキャッシュをクリアする + drawingStateViewModel.putDrawing(bitmap); + } + } + }); + TextView textKeyword =(TextView)findViewById(R.id.textKeyword);//keywordのTextView TextView textMemberNum = (TextView)findViewById(R.id.drawingNowText);//残りのイラスト枚数のTextView @@ -66,6 +95,9 @@ textKeyword.setText("Dno: " + dno + ", Keyword: " + keyword); drawingNow++; textMemberNum.setText(""+drawingNow+"/"+drawingNum); + drawingCanvas.clearCanvas(); + + okToggleButton.setChecked(true); } }); @@ -90,17 +122,12 @@ @Override public void onClick(View v){ - if(v.getId() == R.id.okButtton) {//okButtonが押されたときの処理 -// Bitmap bitmap = null; - drawingCanvas.setDrawingCacheEnabled(true);//キャッシュを取得する設定にする - drawingCanvas.buildDrawingCache(); - Bitmap bitmap = Bitmap.createBitmap(drawingCanvas.getDrawingCache()); - drawingCanvas.destroyDrawingCache();//既存のキャッシュをクリアする - drawingStateViewModel.putDrawing(bitmap); - }else if(v.getId() == R.id.clearButton){//clearButtonが押されたときの処理 + if(v.getId() == R.id.clearButton){//clearButtonが押されたときの処理 drawingCanvas.clearCanvas(); }else if(v.getId() == R.id.eraserButton){//eraserButtonが押されたときの処理 - drawingCanvas.eraserPaint(); + drawingCanvas.setColor(Color.WHITE); + }else if(v.getId() == R.id.blackPenButton){ + drawingCanvas.setColor(Color.BLACK); } } diff --git a/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java b/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java index 1c79e96..e8e70d7 100644 --- a/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java +++ b/app/src/main/java/org/ntlab/irisclient/DrawingCanvas.java @@ -1,6 +1,7 @@ package org.ntlab.irisclient; import android.content.Context; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -15,15 +16,22 @@ public class DrawingCanvas extends View { + private Canvas canvas; + private Bitmap bitmap; + private Path path; private Paint paint; + private int curw; + private int curh; + private int curoldw; + private int curoldh; + public DrawingCanvas(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //1)コンストラクタ(≒必需品) path = new Path();//線を引いたり、図形を描いたり、要するにグラフィック - paint = new Paint();//筆の種類 paint.setColor(Color.BLACK);//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく @@ -34,8 +42,22 @@ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); + canvas.drawBitmap(bitmap, 0, 0, null); canvas.drawPath(path,paint); } + @Override + protected void onSizeChanged( + int w, int h, + int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + curw = w; + curh = h; + curoldw = oldw; + curoldh = oldh; + bitmap = Bitmap.createBitmap( + w, h, Bitmap.Config.ARGB_8888); + canvas = new Canvas(bitmap); + } //3)実際の操縦 (条件分岐:押したとき、動かしたとき、放した時) @Override @@ -47,6 +69,7 @@ //(3-2)タッチの処理 switch (event.getAction()){ case MotionEvent.ACTION_DOWN://タッチした瞬間 + path.reset(); path.moveTo(x,y); invalidate(); break; @@ -55,6 +78,10 @@ invalidate(); break; case MotionEvent.ACTION_UP://手を離す + path.lineTo(x, y); + canvas.drawPath(path, paint); + path.reset(); + invalidate(); break; } @@ -65,16 +92,13 @@ //4)クリア処理 public void clearCanvas(){ + onSizeChanged(curw, curh, curoldw, curoldh); path.reset(); invalidate(); } - //消しゴム - public void eraserPaint(){ - //paint = new Paint(); -// Paint paint = new Paint(); -// paint.setColor(Color.TRANSPARENT); -// paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); + //筆の色を変更 + public void setColor(int color){ + paint.setColor(color); } - } diff --git a/app/src/main/res/layout/activity_drawing.xml b/app/src/main/res/layout/activity_drawing.xml index 265f6ac..d9515e6 100644 --- a/app/src/main/res/layout/activity_drawing.xml +++ b/app/src/main/res/layout/activity_drawing.xml @@ -19,51 +19,39 @@ app:layout_constraintVertical_bias="0.836" />