質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

268閲覧

canvasの内容を保存する

syosinsya109

総合スコア41

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2022/12/27 10:35

前提

androidstudioについて質問します
お絵描きアプリを作成しています。保存機能も追加したいと思ったのですがうまくいきません。
保存内容を編集したりしたいので画像保存などではなく、データベースに保存したいと思っています。
保存するにはjson形式で文字列化にして保存すると思っていたのですが、json形式にするにはmapではないといけないらしく、うまくいかなかったです。

実現したいこと

canvasの内容を保存する

該当のソースコード

MainActivity.java

1import android.os.Bundle; 2import android.view.View; 3import android.widget.Button; 4 5import androidx.appcompat.app.AppCompatActivity; 6 7public class MainActivity extends AppCompatActivity { 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.activity_main); 13 14 final CanvasView cv = (CanvasView) findViewById(R.id.canvas_view); 15 16 //-- Button関連 17 Button bt = (Button) findViewById(R.id.btnClear); 18 //- 動作設定 19 bt.setOnClickListener(new View.OnClickListener() { 20 @Override 21 public void onClick(View v) { 22 cv.allDelete(); 23 } 24 }); 25 26 //-- Button関連 27 Button save = (Button) findViewById(R.id.btnSave); 28 //- 動作設定 29 save.setOnClickListener(new View.OnClickListener() { 30 @Override 31 public void onClick(View v) { 32 } 33 }); 34 } 35}

CanvasView.java

1import android.content.Context; 2import android.graphics.Canvas; 3import android.graphics.Color; 4import android.graphics.Paint; 5import android.graphics.Path; 6import android.util.AttributeSet; 7import android.view.MotionEvent; 8import android.view.View; 9 10import java.util.ArrayList; 11 12public class CanvasView extends View { 13 14 private final ArrayList<Path> pathList; // 直線リスト 15 private final Paint paint; 16 17 //====================================================================================== 18 //-- コンストラクタ 19 //====================================================================================== 20 public CanvasView(Context context, AttributeSet attrs) { 21 super(context, attrs); 22 23 //-- 初期化 24 //- Path関連 25 pathList = new ArrayList<Path>(); // リストの作成 26 27 //- Paint関連 28 paint = new Paint(); 29 paint.setColor(Color.BLACK); // 色の指定 30 paint.setStyle(Paint.Style.STROKE); // 描画設定を'線'に設定 31 paint.setAntiAlias(true); // アンチエイリアスの適応 32 paint.setStrokeWidth(10); // 線の太さ 33 } 34 35 //====================================================================================== 36 //-- 描画メソッド 37 //====================================================================================== 38 @Override 39 protected void onDraw(Canvas canvas) { 40 for ( Path path : pathList ) { 41 canvas.drawPath(path, paint); // Pathの描画 42 } 43 44 invalidate(); // 再描画 45 } 46 47 //====================================================================================== 48 //-- タッチイベント 49 //===================================================================================== 50 private Path drawingPath; 51 52 @Override 53 public boolean onTouchEvent(MotionEvent event) { 54 55 switch ( event.getAction() ) { 56 case MotionEvent.ACTION_DOWN: //- 画面をタッチしたとき 57 drawingPath = new Path(); // 新たなPathのインスタンスの作成 58 drawingPath.moveTo(event.getX(), event.getY()); // 始点を設定 59 pathList.add(drawingPath); // リストにPathを追加 60 break; 61 case MotionEvent.ACTION_UP: //- 画面から指を離したとき 62 drawingPath.moveTo(event.getX(), event.getY()); // 移動先の追加 63 break; 64 case MotionEvent.ACTION_MOVE: //- タッチしながら指をスライドさせたとき 65 drawingPath.lineTo(event.getX(), event.getY()); // 移動先の追加 66 break; 67 } 68 69 for ( Path path : pathList ) { 70 System.out.println("pathList:"+path); 71 } 72 System.out.println("drawingPath:"+drawingPath); 73 System.out.println("pathList:"+pathList); 74 return true; /* 返却値は必ず "true" にすること!! */ 75 } 76 77 //====================================================================================== 78 //-- 削除メソッド 79 //====================================================================================== 80 public void allDelete() { 81 pathList.clear(); // リストが保持しているPathのインスタンスを全て削除 82 } 83}

activity_main.xml

1<!-- LinearLayoutをRelativeLayoutに変更 --> 2<!-- android:orientation="vertical"を追加 --> 3<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:id="@+id/activity_main" 7 8 android:layout_width="match_parent" 9 10 android:layout_height="match_parent" 11 android:orientation="vertical" 12 tools:context=".MainActivity"> 13 14 15 <!-- 追加:ここから --> 16 <!-- キャンバス --> 17 <!-- パッケージ名を含むクラス名で指定 --> 18 <patsample.CanvasView 19 android:id="@+id/canvas_view" 20 android:layout_width="match_parent" 21 android:layout_height="0dp" 22 android:layout_marginStart="8dp" 23 android:layout_marginTop="8dp" 24 android:layout_marginEnd="8dp" 25 android:layout_marginBottom="8dp" 26 app:layout_constraintBottom_toTopOf="@+id/btnClear" 27 app:layout_constraintEnd_toEndOf="parent" 28 app:layout_constraintStart_toStartOf="parent" 29 app:layout_constraintTop_toTopOf="parent" /> 30 31 <!-- キャンバスクリア用ボタン --> 32 <Button 33 android:id="@+id/btnClear" 34 android:layout_width="0dp" 35 android:layout_height="wrap_content" 36 android:layout_alignBottom="@id/canvas_view" 37 android:layout_marginStart="8dp" 38 android:layout_marginEnd="8dp" 39 android:layout_marginBottom="8dp" 40 android:text="@string/btnClear" 41 app:layout_constraintBottom_toBottomOf="parent" 42 app:layout_constraintEnd_toStartOf="@+id/guideline38" 43 app:layout_constraintStart_toStartOf="parent" /> 44 45 <androidx.constraintlayout.widget.Guideline 46 android:id="@+id/guideline38" 47 android:layout_width="wrap_content" 48 android:layout_height="wrap_content" 49 android:orientation="vertical" 50 app:layout_constraintGuide_percent="0.5" /> 51 52 <Button 53 android:id="@+id/btnSave" 54 android:layout_width="0dp" 55 android:layout_height="wrap_content" 56 android:layout_marginStart="8dp" 57 android:layout_marginTop="8dp" 58 android:layout_marginEnd="8dp" 59 android:layout_marginBottom="8dp" 60 android:text="保存" 61 app:layout_constraintBottom_toBottomOf="parent" 62 app:layout_constraintEnd_toEndOf="parent" 63 app:layout_constraintStart_toStartOf="@+id/guideline38" 64 app:layout_constraintTop_toBottomOf="@+id/canvas_view" /> 65 <!-- 追加:ここまで --> 66 67</androidx.constraintlayout.widget.ConstraintLayout>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/12/27 11:22

データベースに保存するなら JSON にする必要はないし、JSON 形式ならデータベースではなくファイルに保存すれば良いような…。また、保存するのは画像としてではなく、どこからどこへと線を引いた、という情報ってことなら、それらをすべて記憶しておく必要があるかと。
syosinsya109

2022/12/27 12:07

コメントありがとうございます。 データベースとかファイルに保存するのならpathList、paint、drawingPathなどの変数の値を全て保存する必要があるのでしょうか
hoshi-takanori

2022/12/27 19:41

Path や Paint そのものは保存できないので、それらを再生成するのに必要な情報を保存することになるでしょうね。
syosinsya109

2022/12/28 06:29

再編成に必要な情報って何でしょうか。 Pathは初期化状態のもので、これ以上ばらせないと思うのですが。。
syosinsya109

2022/12/30 11:49

返信遅れてすいません。 おかげさまで保存することができました! ベストアンサーに選びたいと思っていますので、簡単でいいので回答していただけると嬉しいです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問