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

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

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

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

1996閲覧

ドット絵アプリを開発しているのですがcanvas上をマス目のように区切ることはできるのでしょうか

tokutoku453

総合スコア13

Android

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

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/12/06 19:03

編集2018/12/19 21:01

今、androidstudioでお絵描きアプリを作成しています。現在は画面をタッチした際に点を描画するところまでは完成しております
ここで分からないことなのですがcanvas上にマス目のように領域?を指定することは可能なのでしょうか?いまの状態では描画した点の上に点が重なってしまいドット絵を打つことができない状態になっています
理想としては描画した点に点が重ならない?ようにマス目のような設定を実装したいのですが方法はあるのでしょうか?

DrawingView

1package e. .myapplication; 2 3import android.content.Context; 4import android.graphics.Canvas; 5import android.graphics.Color; 6import android.graphics.Paint; 7import android.graphics.Path; 8import android.util.AttributeSet; 9import android.view.MotionEvent; 10import android.view.View; 11import java.util.ArrayList; 12import java.util.List; 13 14 15public class DrawingView extends View { 16 // 履歴 17 private List<DrawLine> lines; 18 // 現在、描いている線の情報 19 private Paint paint; 20 private Path path; 21 22 // 線の履歴(座標+色) 23 class DrawLine { 24 private Paint paint; 25 private Path path; 26 27 DrawLine(Path path, Paint paint) { 28 this.paint = new Paint(paint); 29 this.path = new Path(path); 30 } 31 32 void draw(Canvas canvas) { 33 canvas.drawPath(this.path, this.paint); 34 } 35 } 36 37 public DrawingView(Context context) { 38 super(context); 39 } 40 41 public DrawingView(Context context, AttributeSet attrs) { 42 super(context, attrs); 43 44 this.path = new Path(); 45 46 this.paint = new Paint(); 47 this.paint.setStyle(Paint.Style.STROKE); 48 this.paint.setAntiAlias(true); 49this.paint.setStrokeCap(Paint.Cap.SQUARE); 50 51 //this.paint.setStrokeWidth(15); 52 53 this.lines = new ArrayList<DrawLine>(); 54 } 55 56 @Override 57 protected void onDraw(Canvas canvas) { 58 super.onDraw(canvas); 59 60 // キャンバスをクリア 61 canvas.drawColor(Color.WHITE); 62 // 履歴から線を描画 63 for(DrawLine line : this.lines) { 64 line.draw(canvas); 65 } 66 // 現在、描いている線を描画 67 canvas.drawPath(this.path, this.paint); 68 69 } 70 71 @Override 72 public boolean onTouchEvent(MotionEvent event) { 73 float x = event.getX(); 74 float y = event.getY(); 75 76 switch (event.getAction()) { 77 case MotionEvent.ACTION_DOWN: 78 this.path.moveTo(x, y); 79 this.path.lineTo(x, y); 80 break; 81 case MotionEvent.ACTION_MOVE: 82 this.path.lineTo(x, y); 83 break; 84 case MotionEvent.ACTION_UP: 85 this.path.lineTo(x, y); 86 // 指を離したので、履歴に追加する 87 this.lines.add(new DrawLine(this.path, this.paint)); 88 // パスをリセットする 89 // これを忘れると、全ての線の色が変わってしまう 90 this.path.reset(); 91 break; 92 } 93 invalidate(); 94 return true; 95 } 96 97 public void delete() { 98 // 履歴をクリア 99 this.lines.clear(); 100 // 現在の線をクリア 101 this.path.reset(); 102 invalidate(); 103 } 104 105 public void setPen(int color){ 106 this.paint.setColor(color); 107 } 108 109 public void setStrokeWidth(float width){ 110 this.paint.setStrokeWidth(width); 111 } 112}

MainActivity

1package e..myapplication; 2 3 import android.app.Activity; 4 import android.graphics.Color; 5 import android.os.Bundle; 6 import android.os.CpuUsageInfo; 7 import android.support.v7.app.AppCompatActivity; 8 import android.view.View; 9 import android.view.Window; 10 import android.widget.Button; 11 import android.widget.Toast; 12 import android.widget.SeekBar; 13 14 15public class MainActivity extends AppCompatActivity implements View.OnClickListener { 16 private DrawingView drawingView; 17 Button red_button,blue_button,yellow_button,black_button,kesigomu_button; 18 Button hutosa1_button,hutosa2_button; 19 20 21 @Override 22 protected void onCreate(Bundle savedInstanceState) { 23 super.onCreate(savedInstanceState); 24 supportRequestWindowFeature(Window.FEATURE_NO_TITLE); 25 setContentView(R.layout.activity_main); 26 27//線の色指定 28 blue_button= findViewById(R.id.blue_button); 29 red_button= findViewById(R.id.red_button); 30 yellow_button= findViewById(R.id.yellow_button) ; 31 black_button= findViewById(R.id.black_button); 32 kesigomu_button= findViewById(R.id.kesigomu_button); 33 34 //線の太さ指定 35 hutosa1_button= findViewById(R.id.hutosa1_button); 36 hutosa2_button= findViewById(R.id.hutosa2_button); 37 38 39 blue_button.setOnClickListener(this); 40 red_button.setOnClickListener(this); 41 yellow_button.setOnClickListener(this); 42 black_button.setOnClickListener(this); 43 kesigomu_button.setOnClickListener(this); 44 45 hutosa1_button.setOnClickListener(this); 46 hutosa2_button.setOnClickListener(this); 47 48 49 50 51 52 this.drawingView = findViewById(R.id.drawing_view); 53 54 findViewById(R.id.deletebutton).setOnClickListener(deleteDrawing); 55 56 } 57 View.OnClickListener deleteDrawing = new View.OnClickListener(){ 58 @Override 59 public void onClick(View view){ 60 drawingView.delete(); 61 } 62 }; 63 64 65 public void onClick(View v){ 66 switch(v.getId()){ 67 //線の色指定 68 case R.id.blue_button: 69 drawingView.setPen(Color.BLUE); 70 Toast.makeText(this,"blue",Toast.LENGTH_SHORT).show(); 71 break; 72 case R.id.red_button: 73 drawingView.setPen(Color.RED); 74 Toast.makeText(this,"red",Toast.LENGTH_SHORT).show(); 75 break; 76 case R.id.yellow_button: 77 drawingView.setPen(Color.YELLOW); 78 Toast.makeText(this,"yellow",Toast.LENGTH_SHORT).show(); 79 break; 80 case R.id.black_button: 81 drawingView.setPen(Color.BLACK); 82 Toast.makeText(this,"black",Toast.LENGTH_SHORT).show(); 83 break; 84 case R.id.kesigomu_button: 85 drawingView.setPen(Color.WHITE); 86 drawingView.setStrokeWidth(45); 87 Toast.makeText(this,"消しゴム",Toast.LENGTH_SHORT).show(); 88 break; 89 //線の太さ指定 90 case R.id.hutosa1_button: 91 drawingView.setStrokeWidth(15); 92 Toast.makeText(this,"太さ中",Toast.LENGTH_SHORT).show(); 93 break; 94 case R.id.hutosa2_button: 95 drawingView.setStrokeWidth(30); 96 Toast.makeText(this,"太さ大",Toast.LENGTH_SHORT).show(); 97 break; 98 99 } 100 } 101 102 @Override 103 public void onPointerCaptureChanged(boolean hasCapture) { 104 105 } 106 107 108} 109

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

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

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

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

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

guest

回答1

0

自己解決

DrawRectを使用して見た目だけではありますが、マス目を表示できるようにしました。

投稿2019/01/03 00:13

tokutoku453

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問