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

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

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

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

Android

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

Q&A

解決済

1回答

1445閲覧

postDelayed();を使って描画アニメーションを作りたい

ko20vonobird

総合スコア50

Java

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

Android

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

0グッド

0クリップ

投稿2016/11/21 01:33

編集2016/11/21 13:03

###前提・実現したいこと
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/ツール等のバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

まずはログ出力を行いonDrawが呼ばれているかを確認してください。
また、コードはコード用の記述方法を使ってください。

投稿2016/11/21 06:23

yona

総合スコア18155

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

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

ko20vonobird

2016/11/21 11:04

遅くなりました、やり方が合っているかが分からないのですが、どのみちonDrawは呼ばれていない感じです。また、この質問を編集する前は全文を載せていたのですが、そこではちゃんと外部クラスのウィジェットは動作しております。
yona

2016/11/21 12:02

Viewを使っている箇所のコードを書いてください。 また、他の質問のコードの書き方とあなたの質問のコードで表示が異なることに気がつきませんか? 後半は何を言っているか意味がわかりません。
ko20vonobird

2016/11/21 12:46

当方かなりの初心者なものでしてViewを使っている箇所のコードというのがどこか、思い当たる部分はありますが確信することが出来ません。なので全文を載せ直しました。 表示が異なることにつきましてはこのサイトを使うのが初めてなものでして、言われるまで他の質問を見ていませんでした。 後半についてですが、全文を見れば理解できるかと、外部クラスと書いたのは、Viewを継承したクラスが入れ子になっているのでその表現で良いかと思いました(実際調べたことがありますが、外部クラスというワードは出てきました。)。また、ウィジェットを2つのクラスのうち、外側のクラスに記述していたので外部クラスのウィジェットと書かせていただきましたが、理解できなかったということは私の国語力のなさが原因であり、誠に申し訳ないです。
yona

2016/11/21 13:09

外部クラスというワードが見つかったくらいで、あなたの指しているものが外部クラスになることはありません。 外部クラスとは具体的にはどのクラスを指していますか? また、質問のコードでScreenクラスはインスタンス化すらされていないですよね?クラスを宣言しただけでは画面には表示されませんよ。
ko20vonobird

2016/11/21 13:22 編集

私が思っている外部クラスというのはActivityを継承しているSampleInput4クラスのことです。 詳しく聞かせてください、どうかお願いします。
yona

2016/11/21 13:35

Screenを他のViewと同様にインスタンス化してaddViewしてください。
ko20vonobird

2016/11/21 13:44

ありがとうございます、お陰様で画面を指定した色で塗りつぶすことができ、円も初期化位置に表示されました。 ただ、まだ問題がありまして、アニメーションが動きません、これはインスタンス化してaddViewするだけでは動かないものなのでしょうか?
ko20vonobird

2016/11/21 14:04

度々失礼します、if文のintを外したところ動くようになりました。ここからはさらに詳細な問題になるので大元は解決したということで、お礼を申し上げます、ありがとうございます。色々勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問