<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)
というエラーが表示され困っています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。