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