diff --git a/app/src/main/java/org/ntlab/acanthus_client/entities/Pen.java b/app/src/main/java/org/ntlab/acanthus_client/entities/Pen.java index 17e335e..c10e7e6 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/entities/Pen.java +++ b/app/src/main/java/org/ntlab/acanthus_client/entities/Pen.java @@ -3,34 +3,91 @@ //----------------------------------------------------------------- // public class Pen { - private Integer penType; + //private Integer penType; private Integer color; + private Integer red; + private Integer green; + private Integer blue; + private Integer alpha; private Integer thickness; //----------------------------------------------------------------- //----------------------------------------------------------------- // - public Pen(Integer penType, Integer color, Integer thickness) { - this.penType = penType; + //色を直接指定したいとき + public Pen(/*Integer penType,*/ Integer color, Integer thickness) { + //this.penType = penType; this.color = color; this.thickness = thickness; } - //----------------------------------------------------------------- - // getter - public Integer getPenType() { - return this.penType; + //色をRGBで指定したいとき alphaはアルファ値で透明度(0から255で、0の時に完全な透明になる) + public Pen(Integer alpha, Integer red,Integer green,Integer blue, Integer thickness) { + this.alpha = alpha; + this.red = red; + this.green = green; + this.blue = blue; + this.thickness = thickness; } + //----------------------------------------------------------------- + // getter +// public Integer getPenType() { +// return this.penType; +// } + public Integer getColor() { - return this.getColor(); + return this.color; } + + public Integer getAlpha(){ + return this.alpha; + } + + public Integer getRed(){ + return this.red; + } + + + public Integer getGreen(){ + return this.green; + } + + public Integer getBlue(){ + return this.blue; + } + + public Integer getThickness() { return this.thickness; } //----------------------------------------------------------------- // setter + public void setColor(Integer color ){ + this.color = color; + } + + public void setAlpha(Integer alpha){ + this.alpha = alpha; + } + + public void setRed(Integer red){ + this.red = red; + } + + public void setGreen(Integer green){ + this.green = green; + } + + public void setBlue(Integer blue){ + this.blue = blue; + } + + + public void setThickness(Integer thickness){ + this.thickness = thickness; + } //----------------------------------------------------------------- } 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 2757a84..49cd83a 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 @@ -12,6 +12,7 @@ import android.view.MotionEvent; import android.view.View; +import org.ntlab.acanthus_client.entities.Pen; import org.ntlab.acanthus_client.entities.Position; import org.ntlab.acanthus_client.entities.Stroke; @@ -42,6 +43,7 @@ private int curh; private int curoldw; private int curoldh; + private Pen pen; //----------------------------------------------------------------- @@ -49,15 +51,17 @@ public PaintCanvas(Context context, @Nullable AttributeSet attrs) { super(context, attrs); + pen = new Pen(255,0,0,0,20); + //pen =new Pen(Color.BLACK,20);//新しくPenクラスを作り色と幅の値を設定 path = new Path(); // 図形描画 clonepath = new Path(); // 図形描画 latestpath = new Path(); // 図形描画 paint = new Paint();//筆の種類 clonepaint = new Paint();//筆の種類 latestpaint = new Paint();//筆の種類 - paint.setColor(Color.BLACK);//色の指定 + paint.setColor(Color.argb(pen.getAlpha(),pen.getRed(),pen.getGreen(),pen.getBlue()));//色の指定 paint.setStyle(Paint.Style.STROKE);//線をひく - paint.setStrokeWidth(20);//幅 + paint.setStrokeWidth(pen.getThickness());//幅 clonepaint.setColor(Color.RED);//色の指定 clonepaint.setStyle(Paint.Style.STROKE);//線をひく clonepaint.setStrokeWidth(20);//幅 @@ -77,6 +81,8 @@ return curCanvas; } + public Pen getPen(){return pen;} + //----------------------------------------------------------------- // setter public void setPaintViewModel(PaintViewModel paintViewModel) { @@ -91,6 +97,10 @@ super.onDraw(curCanvas); //canvas.setBitmap(image); //curCanvas = canvas; +// paint.setColor(pen.getColor()); +// paint.setStrokeWidth(pen.getThickness()); + paint.setColor(Color.argb(pen.getAlpha(),pen.getRed(),pen.getGreen(),pen.getBlue())); + paint.setStrokeWidth(pen.getThickness()); canvas.drawPath(path, paint); canvas.drawPath(clonepath, clonepaint); canvas.drawPath(latestpath,latestpaint); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java index 7aec0fa..70dc7f4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PaintToolBar.java @@ -45,7 +45,7 @@ //----------------------------------------------------------------- // case R.id.navigation_pen: - transitionPenDetailFragment(appCompatActivity); + transitionPenDetailFragment(appCompatActivity,paintCanvas,penDetailsFragment); return true; //----------------------------------------------------------------- // @@ -74,11 +74,13 @@ } //----------------------------------------------------------------- //ペンの詳細変更ページへ移動 - private void transitionPenDetailFragment(AppCompatActivity appCompatActivity){ - fragmentManager = appCompatActivity.getSupportFragmentManager(); - FragmentTransaction transaction = fragmentManager.beginTransaction(); - transaction.replace(R.id.dummyFragment, penDetailsFragment); - transaction.commit(); + private void transitionPenDetailFragment(AppCompatActivity appCompatActivity ,PaintCanvas paintCanvas,PenDetailsFragment penDetailsFragment){ + penDetailsFragment.init(appCompatActivity,paintCanvas,penDetailsFragment); + +// fragmentManager = appCompatActivity.getSupportFragmentManager(); +// FragmentTransaction transaction = fragmentManager.beginTransaction(); +// transaction.replace(R.id.dummyFragment, penDetailsFragment); +// transaction.commit(); // Acanthus acanthus =(Acanthus) appCompatActivity.getApplication(); // Intent intent = new Intent(acanthus,PenDetailsFragment.class); diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PenDetailsFragment.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PenDetailsFragment.java index 70c19d9..16e77d4 100644 --- a/app/src/main/java/org/ntlab/acanthus_client/views/paint/PenDetailsFragment.java +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/PenDetailsFragment.java @@ -1,18 +1,34 @@ package org.ntlab.acanthus_client.views.paint; +import android.graphics.Color; import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.EditText; +import android.widget.SeekBar; +import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import org.ntlab.acanthus_client.R; import org.ntlab.acanthus_client.databinding.FragmentPenDetailBinding; -public class PenDetailsFragment extends Fragment { +public class PenDetailsFragment extends Fragment implements TextView.OnEditorActionListener,View.OnFocusChangeListener, SeekBar.OnSeekBarChangeListener { private PaintCanvas paintCanvas; private FragmentPenDetailBinding binding; + private SeekBar sbAlpha,sbRed,sbGreen,sbBlue, sbThickness; + private EditText edtAlpha,edtRed,edtGreen,edtBlue, edtThickness; + private TextView txtColor; + private StrokeCanvasView strokeCanvasView; + + @Override public View onCreateView(@NonNull LayoutInflater inflater, @@ -20,8 +36,217 @@ binding = FragmentPenDetailBinding.inflate(inflater,container,false); View root = binding.getRoot(); + + //SeekBarやEditText、txtColorの紐づけ + txtColor = root.findViewById(R.id.txtColor); + sbAlpha = root.findViewById(R.id.seekBarAlpha); + sbRed = root.findViewById(R.id.seekBarRed); + sbGreen = root.findViewById(R.id.seekBarGreen); + sbBlue = root.findViewById(R.id.seekBarBlue); + sbThickness = root.findViewById(R.id.seekBarThickness); + edtAlpha = root.findViewById(R.id.edtAlpha); + edtRed = root.findViewById(R.id.edtRed); + edtGreen = root.findViewById(R.id.edtGreen); + edtBlue = root.findViewById(R.id.edtBlue); + edtThickness = root.findViewById(R.id.edtThickness); + + //seekBarとEditTextの初期値 + sbAlpha.setProgress(paintCanvas.getPen().getAlpha()); + edtAlpha.setText(String.format("%1$d",sbAlpha.getProgress())); + sbRed.setProgress(paintCanvas.getPen().getRed()); + edtRed.setText(String.format("%1$d",sbRed.getProgress())); + sbGreen.setProgress(paintCanvas.getPen().getGreen()); + edtGreen.setText(String.format("%1$d",sbGreen.getProgress())); + sbBlue.setProgress(paintCanvas.getPen().getBlue()); + edtBlue.setText(String.format("%1$d",sbBlue.getProgress())); + changeColor(); + + sbThickness.setProgress(paintCanvas.getPen().getThickness()); + edtThickness.setText(String.format("%1$d",sbThickness.getProgress())); + //strokeCanvasView.setStrokeWidth(sbThickness.getProgress(),paintCanvas); + + //SeekBarやEditTextの処理 + //SeekBarを動かしたとき + sbAlpha.setOnSeekBarChangeListener(this); + sbRed.setOnSeekBarChangeListener(this); + sbGreen.setOnSeekBarChangeListener(this); + sbBlue.setOnSeekBarChangeListener(this); + sbThickness.setOnSeekBarChangeListener(this); + + //EditTextを操作したとき + edtAlpha.setOnEditorActionListener(this); + edtRed.setOnEditorActionListener(this); + edtGreen.setOnEditorActionListener(this); + edtBlue.setOnEditorActionListener(this); + edtThickness.setOnEditorActionListener(this); + + //EditTextを操作中に他のeditTextに入力をしようとしたとき + edtAlpha.setOnFocusChangeListener(this); + edtRed.setOnFocusChangeListener(this); + edtGreen.setOnFocusChangeListener(this); + edtBlue.setOnFocusChangeListener(this); + edtThickness.setOnFocusChangeListener(this); + + + + //cancelボタンを押したときの処理。 + View button =root.findViewById(R.id.PenDetailCancel); + button.setOnClickListener(view ->{ + FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + transaction.remove(this).commit(); + }); + return root; } + //PaintToolBarから最初に呼び出されるメソッド + public void init(AppCompatActivity appCompatActivity,PaintCanvas paintCanvas,Fragment fragment){ + FragmentManager fragmentManager=appCompatActivity.getSupportFragmentManager(); + FragmentTransaction transaction = fragmentManager.beginTransaction(); + transaction.replace(R.id.dummyFragment,fragment).commit(); + setPaintCanvas(paintCanvas); + } + + + //SeekBarの具体的処理 + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){ + switch (seekBar.getId()){ + case R.id.seekBarAlpha: + edtAlpha.setText(String.format("%1$d", progress)); + paintCanvas.getPen().setAlpha(progress); + break; + case R.id.seekBarRed: + edtRed.setText(String.format("%1$d", progress)); + paintCanvas.getPen().setRed(progress); + break; + case R.id.seekBarGreen: + edtGreen.setText(String.format("%1$d" , progress)); + paintCanvas.getPen().setGreen(progress); + break; + case R.id.seekBarBlue: + edtBlue.setText(String.format("%1$d", progress)); + paintCanvas.getPen().setBlue(progress); + break; + case R.id.seekBarThickness: + edtThickness.setText(String.format("%1$d", progress)); + paintCanvas.getPen().setThickness(progress); + //strokeCanvasView.setStrokeWidth(progress,paintCanvas); + break; + default: return; + } + changeColor(); + } + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + + + //EditTextの具体的処理 + @Override + public void onFocusChange(View v, boolean hasFocus) { + //int value = Integer.parseInt(((TextView)v).getText().toString()); + //value = Math.max(0,Math.min(255,value)); + int value = 0; + //Log.d("strong", v.getText().toString()); + try { + value = Integer.parseInt(((TextView)v).getText().toString()); + }catch(NumberFormatException ex) { + ((TextView) v).setText("0"); + } + value = Math.max(0,Math.min(255,value)); + + +// 何も入力していないときの処理 +// String txt = ((TextView)v).getText().toString(); +// if(txt.equals("")) Toast.makeText(getActivity(), "入力してください", Toast.LENGTH_LONG).show(); + + switch(v.getId()){ + case R.id.edtAlpha: + sbAlpha.setProgress(value); + break; + case R.id.edtRed: + sbRed.setProgress(value); + break; + case R.id.edtGreen: + sbGreen.setProgress(value); + break; + case R.id.edtBlue: + sbBlue.setProgress(value); + break; + + case R.id.edtThickness: + sbThickness.setProgress(value); + value = Math.max(0,Math.min(50,value)); + //strokeCanvasView.setStrokeWidth(value,paintCanvas); + break; + default:return; + } + + changeColor(); + } + + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + int value = 0; + //Log.d("strong", v.getText().toString()); + try { + value = Integer.parseInt(v.getText().toString()); + }catch(NumberFormatException ex) { + v.setText("20"); + } + value = Math.max(0,Math.min(255,value)); + + + // 何も入力していないときの処理 + // if(v.getText().toString().equals("")) Toast.makeText(getActivity(), "入力してください", Toast.LENGTH_LONG).show(); + + switch(v.getId()){ + case R.id.edtAlpha: + sbAlpha.setProgress(value); + break; + case R.id.edtRed: + sbRed.setProgress(value); + break; + case R.id.edtGreen: + sbGreen.setProgress(value); + break; + case R.id.edtBlue: + sbBlue.setProgress(value); + break; + case R.id.edtThickness: + value = Math.max(0,Math.min(50,value)); + sbThickness.setProgress(value); + //strokeCanvasView.setStrokeWidth(value,paintCanvas); + break; + default:return false; + } + + changeColor(); + return false; + } + + private void changeColor(){ + int a,r,g,b; + a = Integer.parseInt(edtAlpha.getText().toString()); + r = Integer.parseInt(edtRed.getText().toString()); + g = Integer.parseInt(edtGreen.getText().toString()); + b = Integer.parseInt(edtBlue.getText().toString()); + txtColor.setBackgroundColor(Color.argb(a ,r , g, b)); + + } + + + //setter + private void setPaintCanvas(PaintCanvas paintCanvas){ + this.paintCanvas=paintCanvas; + } } diff --git a/app/src/main/java/org/ntlab/acanthus_client/views/paint/StrokeCanvasView.java b/app/src/main/java/org/ntlab/acanthus_client/views/paint/StrokeCanvasView.java new file mode 100644 index 0000000..59b596c --- /dev/null +++ b/app/src/main/java/org/ntlab/acanthus_client/views/paint/StrokeCanvasView.java @@ -0,0 +1,50 @@ +package org.ntlab.acanthus_client.views.paint; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.util.AttributeSet; +import android.view.View; + +import org.ntlab.acanthus_client.entities.Pen; + + +public class StrokeCanvasView extends View{ + private Paint paint; + private PaintCanvas paintCanvas; + private Integer strokeWidth=20; + private boolean viewflg; + + public StrokeCanvasView(Context context, AttributeSet attrs) { + super(context, attrs); + paint = new Paint(); + viewflg = true; + } + @Override + protected void onDraw(Canvas canvas){ + //this.strokeWidth = this.paintCanvas.getPen().getThickness(); + if(viewflg) { + paint.setStrokeWidth(this.strokeWidth); + paint.setColor(Color.argb(255, 0, 0, 0)); + canvas.drawLine(0, 25, 150, 25, paint); + }else + canvas.drawColor(0, PorterDuff.Mode.CLEAR); + + } + + + + public void setStrokeWidth(Integer width ,PaintCanvas paintCanvas){ + this.strokeWidth = width; + this.paintCanvas = paintCanvas; + } + + public void showCanvas(boolean flg){ + viewflg = flg; + // 再描画 + invalidate(); + } + + +} diff --git a/app/src/main/res/drawable/shape_style.xml b/app/src/main/res/drawable/shape_style.xml new file mode 100644 index 0000000..d1dd42d --- /dev/null +++ b/app/src/main/res/drawable/shape_style.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_paint.xml b/app/src/main/res/layout/activity_paint.xml index 75ad7b1..dd4c6ff 100644 --- a/app/src/main/res/layout/activity_paint.xml +++ b/app/src/main/res/layout/activity_paint.xml @@ -145,14 +145,13 @@ + app:layout_constraintTop_toBottomOf="@+id/button_addPage"> diff --git a/app/src/main/res/layout/fragment_pen_detail.xml b/app/src/main/res/layout/fragment_pen_detail.xml index ac6c239..887445f 100644 --- a/app/src/main/res/layout/fragment_pen_detail.xml +++ b/app/src/main/res/layout/fragment_pen_detail.xml @@ -4,16 +4,230 @@ xmlns:tools="http://schemas.android.com/tools" android:id="@+id/PenDetailFragment" android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="match_parent" + android:background="@drawable/shape_style"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file