###前提・実現したいこと
Android(Java)にて円が動き回るというプログラムを作るのが最終目標です。
###発生している問題・エラーメッセージ
エラーメッセージも特にこれといったものはないのに動かないです。
###該当のソースコード
Java
1import android.app.Activity; 2import android.content.Intent; 3import android.os.*; 4import android.content.Context; 5import android.view.Display; 6import android.view.View; 7import android.graphics.*; 8import android.view.WindowManager; 9import android.widget.*; 10 11import java.util.Random; 12 13public class SampleInput4 extends Activity{ 14 @Override 15 public void onCreate(Bundle savedInstanceState) { 16 super.onCreate(savedInstanceState); 17 putparts(); 18 } 19 public void putparts() { 20 final SampleInput4 activity5 = this; 21 FrameLayout fl = new FrameLayout(this); 22 this.setContentView(fl); 23 LinearLayout ll = new LinearLayout(this); 24 ll.setOrientation(LinearLayout.VERTICAL); 25 fl.addView(ll); 26 TextView tv = new TextView(this); 27 tv.setText("画面5"); 28 tv.setTextSize(36.0f); 29 ll.addView(tv); 30 Button btn = new Button(this); 31 btn.setText("Click to 画面1"); 32 btn.setTextSize(24.0f); 33 ll.addView(btn); 34 btn.setOnClickListener(new View.OnClickListener() { 35 @Override 36 public void onClick(View view) { 37 activity5.button_onClick(view); 38 } 39 }); 40 } 41 public void button_onClick(View view) { 42 startActivity(new Intent(this, MainActivity.class)); 43 } 44 public class Screen extends View { 45 Handler hn; 46 Runnable r; 47 Paint pa; 48 Random rnd = new Random(); 49 int count = 0; 50 int mcx = 0, mcy = 0, cx = 0, cy = 0, hmx = 0, hmy = 0; 51 public Screen(Context context) { 52 super(context); 53 timemethod(); 54 } 55 @Override 56 public void onDraw(Canvas c) { 57 super.onDraw(c); 58 setWillNotDraw(false); 59 if (count == 0) { 60 int rndnum = rnd.nextInt(360); 61 /*0~359度までのいずれかを定義*/ 62 /* 2pi:rad=360:kaku 63 rad=pi*kaku/180 */ 64 Double pai = 3.14159265; 65 Double rad = rndnum / 180 * pai; 66 int cx = 50, cy = 50; 67 int hmx = (int) Math.floor(Math.cos(rad) * 10); 68 int hmy = (int) Math.floor(Math.sin(rad) * 10); 69 } 70 pa = new Paint(); 71 c.drawColor(Color.WHITE); 72 WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); 73 Display dp = wm.getDefaultDisplay(); 74 Point p = new Point(); 75 dp.getSize(p); 76 if (count == 0){ 77 int mcx = cx, mcy = cy; 78 } 79 mcx += hmx; 80 mcy += hmy; 81 if (mcx < 0){ 82 mcx = 0; 83 } 84 if (mcy < 0){ 85 mcy = 0; 86 } 87 if (mcx > p.x){ 88 mcx = p.x; 89 } 90 if (mcy > p.y){ 91 mcy = p.y; 92 } 93 if (mcx - 25 <= 0 || mcx + 25 >= p.x){ //p.xはpのx 94 hmx = -hmx; 95 } 96 if (mcy - 25 <= 0 || mcy + 25 >= p.y){ 97 hmy = -hmy; 98 } 99 //円描画 100 pa.setARGB(255, 100, 100, 255); 101 pa.setStyle(Paint.Style.STROKE); 102 pa.setStrokeWidth(5); 103 c.drawCircle(mcx, mcy, 50, pa); 104 count = 1; 105 } 106 public void timemethod() { 107 hn = new Handler(); 108 r = new Runnable() { 109 @Override 110 public void run() { 111 percircle(); 112 } 113 }; 114 hn.postDelayed(r, 10); 115 } 116 public void percircle() { 117 invalidate(); 118 } 119 public void onPause() { 120 hn.removeCallbacks(r); 121 } 122 public void onDestroy() { 123 hn.removeCallbacks(r); 124 } 125 } 126}
###試したこと
このコードで動かないので、色々調べた結果、setWillNotDraw(false);を記述しました。
###補足情報(言語/FW/ツール等のバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/21 11:04
2016/11/21 12:02
2016/11/21 12:46
2016/11/21 13:09
2016/11/21 13:22 編集
2016/11/21 13:35
2016/11/21 13:44
2016/11/21 14:04