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

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

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

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

Android Studio

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

Q&A

解決済

2回答

1238閲覧

Androidお絵かきのViewについて

jigokunoiruka

総合スコア8

Android

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

Android Studio

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

0グッド

0クリップ

投稿2017/04/09 13:20

編集2017/04/11 07:11

<4/11に編集しました>

java

1//interfaceを作成 2public interface TouchupListener extends EventListener{ 3 public void strokeWasFinished(); 4}

java

1//イベントが発生したことを通知するクラス 2public class TouchupNotify { 3 4 private TouchupListener listener; 5 6 // 画像が表示された事を通知 7 public void informToActivity() { 8 listener.strokeWasFinished(); 9 } 10 11 // リスナーをセットする 12 public void setListener(TouchupListener listener){ 13 this.listener = listener; 14 } 15 16}

java

1public class DrawingView extends View { 2 3 private Paint paint; 4 private Path path; 5 private TouchupNotify touchupNotify; 6 7 public DrawingView(Context context, AttributeSet attrs) { 8 super(context, attrs); 9 10 this.path = new Path(); 11 12 this.paint = new Paint(); 13 paint.setColor(Color.RED); 14 this.paint.setStyle(Paint.Style.STROKE); 15 this.paint.setAntiAlias(true); 16 this.paint.setStrokeWidth(10); 17 this.path.reset(); 18 invalidate(); 19 } 20 21 @Override 22 protected void onDraw(Canvas canvas) { 23 super.onDraw(canvas); 24 canvas.drawPath(path, paint); 25 } 26 27 @Override 28 public boolean onTouchEvent(MotionEvent event) { 29 float x = event.getX(); 30 float y = event.getY(); 31 32 switch (event.getAction()) { 33 case MotionEvent.ACTION_DOWN: 34 this.path.moveTo(x, y); 35 break; 36 case MotionEvent.ACTION_MOVE: 37 this.path.lineTo(x, y); 38 break; 39 case MotionEvent.ACTION_UP: 40 this.path.lineTo(x, y); 41 //ここで呼び出すがエラーが出る↓ 42 touchupNotify.informToActivity(); 43 break; 44 } 45 invalidate(); 46 return true; 47 } 48 49 public void delete() { 50 this.path.reset(); 51 invalidate(); 52 } 53} 54

java

1public class DrawingActivity extends AppCompatActivity implements TouchupListener{ 2 3 private TouchupNotify touchupNotify; 4 int count=1; 5 6 @Override 7 protected void onCreate(Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 setContentView(R.layout.activity_drawing); 10 11 touchupNotify=new TouchupNotify(); 12 touchupNotify.setListener(this); 13 14 15 16 17 public void checkPlayerDialog(String message, String btnstr, final int WorH){ 18 // 確認ダイアログの生成 19 if(count==player_num-1){ 20 return; 21 } 22 AlertDialog.Builder alertDlg = new AlertDialog.Builder(this); 23 alertDlg.setMessage(message); 24 alertDlg.setPositiveButton( 25 btnstr, 26 new DialogInterface.OnClickListener() { 27 public void onClick(DialogInterface dialog, int which) { 28 // OK ボタンクリック処理 29 } 30 } 31 }); 32 33 // 表示 34 alertDlg.setCancelable(false); 35 alertDlg.create().show(); 36 count++; 37 38 } 39 40 @Override 41 public void strokeWasFinished() { 42 checkPlayerDialog(String.valueOf(count)+"画目です", "OK",count); 43 } 44}

http://qiita.com/1plus4/items/45773e997f56276aac68
このサイトを参考にして、androidでお絵かきアプリを作成しています。
DrawingViewで、一画書く度にアクティビティにてメッセージダイアログを出すようにしたいのですが、
上記のように独自のリスナーを作成し、アクティビティに実装し、drawingViewで通知してみたところ

04-11 15:55:30.255 2610-2610/com.artwolf.jigokunoiruka.artwolf E/AndroidRuntime: FATAL EXCEPTION: main

Process: com.artwolf.jigokunoiruka.artwolf, PID: 2610 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.artwolf.jigokunoiruka.aaaaa.TouchupNotify.informToActivity()' on a null object reference at com.artwolf.jigokunoiruka.artwolf.DrawingView.onTouchEvent(DrawingView.java:54)

というエラーが表示され困っています。

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

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

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

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

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

guest

回答2

0

自己解決

自分で作ったリスナーを使わない方法で作成しました。

投稿2017/04/11 08:52

jigokunoiruka

総合スコア8

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

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

0

一画描くたびにDialogFragmentを使ってダイアログを表示したらいいですよ。

投稿2017/04/09 14:03

yona

総合スコア18155

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

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

jigokunoiruka

2017/04/10 06:45

お返事ありがとうございます。 activityの方で「一画書く度」にイベントを起こすには、activityのどこにどうDialogFragmentを使えばいいのでしょうか??
yona

2017/04/10 06:51

それはあなたが考え、あなたなりのコードを書いてから質問し直してください。
jigokunoiruka

2017/04/10 07:11

お返事ありがとうございます。 コードは、質問のリンクの先にあるものを考えてくれたら嬉しいです。
yona

2017/04/10 07:34

自分で考えましょう。 サポートセンターでは無いんですよ。
abs123

2017/04/10 08:03

横から失礼。 jigokunoirukaさんは、 DrawingViewでなぜ絵を描くことができるのか、理解できていますか? 理解できているなら、「一画書く度」にイベントを起こす、 なんてところで躓くことはないと思います。 jigokunoirukaさんがやるべきことは、DrawingViewを理解することです。
jigokunoiruka

2017/04/10 10:25

お返事ありがとうございます。 もしかしたらDrawingViewへの理解がまだまだなのかもしれないですね。。。 今やってみたのは アクティビティクラスにて   num=0のグローバル変数を用意   ダイアログで「num画目です。」と表示されるmakeDialog関数を用意。   makeDialogを呼ぶごとにnumの数字がインクリメントされる。 DrawingViewのOnTouchEvent内のMotionEvent.ACTION_UPにてさきほどのmakeDialog関数を呼ぶようにしてみたのですがエラーが出ます。。
yona

2017/04/10 11:04 編集

用意したではわかりません。 コードを質問に追記してください。 また、エラーと言われてもわかりません。 エラーメッセージやエラーログを質問に追記してください。
jigokunoiruka

2017/04/11 07:14

yona様: 質問サイトを使う経験が浅いため、質問している側なのに至らぬ点が多く、ご迷惑をおかけしております。 実際に今直面しているエラーをコードとともに追記させてもらいました。
yona

2017/04/11 07:37

エラーが発生している場合はエラーメッセージを自分で調べてから質問をしましょう。 DrawingView.javaの54行目でヌルポインタが発生しています。
jigokunoiruka

2017/04/11 08:02

お返事ありがとうございます。 もちろん調べてもわからないので質問しています。質問の内容についての回答をお願いしたいです。
yona

2017/04/11 08:20

では、調べたことも質問に追記してください。
jigokunoiruka

2017/04/11 08:27

yona様: 調べた結果、めぼしいサイトが見つからなかったので質問しています。最終手段として質問をしているのです。そして現時点の質問の内容で、答えるには判断材料が足りないわけでは無いですよね。あまり答える気が無いなら結構です。 ありがとうございました。
yona

2017/04/11 08:32

はい、頑張ってください。
abs123

2017/04/11 08:42

横から失礼します。 >調べた結果、めぼしいサイトが見つからなかった どういったワードで検索をかけた結果、サイトが見つからなかったのか、 とても興味があります。 手間でなければ教えていただけないでしょうか。 あと、めぼしいサイトと判断する基準なんかも、答えられるのであれば教えてほしいです。
yona

2017/04/11 08:47

abs123さん そうですね、それはとても気になりますね。Googleの検索ワードだけでも知りたいですね。
jigokunoiruka

2017/04/11 08:51

abs123様: そんなに深く考えた基準があるわけでは無いですが、まだプログラミングの初心者ですので、ある程度自分と同じ境遇で難度がある応用をしなくても大丈夫なところを基準としてます。 検索ワードについてはViewクラスからactivityにイベントを通知する方法について検索しています。その上で自分の技術で自分のプログラムに応用が可能なサイトを見つけることができなかったのでここで質問させていただきました。
abs123

2017/04/12 01:00

今回の件を解決するには、 Android以前に、Javaに関する知識や経験が必要です。 ネットに上がっているAndroid関係の記事は、 Application Frameworkに関係するものが中心になるので、 今回の場合、検索中にAndroid関係のワードを含めてしまうと、極端に情報が少なくなると思います。 Androidやってんだからそのぐらいできて当然だよね?ってことです。 Javaの勉強のためにAndroidアプリを作っているのであれば、 やめた方がいい、と言っておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問