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

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

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

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

Android

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

Q&A

解決済

2回答

14766閲覧

invalidate();で再描画されず、調べるとそれ自体が効いていないです

ko20vonobird

総合スコア50

Java

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

Android

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

0グッド

0クリップ

投稿2017/04/19 07:51

編集2017/04/20 03:11

###発生している問題
invalidate();でonDraw();が再描画されなく、ログ出力で調べたところinvalidate();が効いていないことが判明しました。

###現在の状況
xmlファイルとカスタムビュー(と思われるもの)を扱うファイル、そして操作するためのファイルがあります。xmlファイルでは、

xml

1<?xml version="1.0" encoding="utf-8"?> 2<android.support.percent.PercentFrameLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 android:id="@+id/pfl" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:gravity="top"> 9 <com.gmail.archerygame.Designgame 10 android:id="@+id/sousa" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 /> 14 <TextView 15 android:id="@+id/powertext" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:text="power" 19 android:layout_gravity="left|top" 20 android:textSize="18dp" 21 app:layout_marginLeftPercent="31%" 22 /> 23 <TextView 24 android:id="@+id/staminatext" 25 android:layout_width="wrap_content" 26 android:layout_height="wrap_content" 27 android:text="stamina" 28 android:layout_gravity="left|top" 29 android:textSize="18dp" 30 app:layout_marginTopPercent="6%" 31 app:layout_marginLeftPercent="31%" 32 /> 33 <TextView 34 android:id="@+id/timer" 35 android:layout_width="wrap_content" 36 android:layout_height="wrap_content" 37 android:text="Timer" 38 android:textSize="22dp" 39 android:layout_gravity="right|top" 40 /> 41 42</android.support.percent.PercentFrameLayout>

の、

xml

1<com.gmail.archerygame.Designgame 2 android:id="@+id/sousa" 3 android:layout_width="wrap_content" 4 android:layout_height="wrap_content" 5 />

でカスタムビュー(と思われるもの)をレイアウトしています。
操作するファイルでonTouchイベントである領域がtrueであるときに、カスタムビュー(と思われるもの)を扱うファイルにあるメソッドを呼び出し、以下のように記述して再描画を行おうとしています。(以下、文字数制限を考慮して、必要な部分のみ取り出しています。)

java

1public class Designgame extends View { 2---省略 3public void setB(int Bnum){ 4 b = Bnum; 5} 6---省略 7protected void onDraw(Canvas c) { 8---省略 9paint.setColor(Color.argb(255, r, g, b)); 10Log.d("color", "");//ログで再描画されているか確認 11---省略 12} 13public void colchange() { 14 Log.d("colchange", "true");//ログでメソッドが呼び出されているか確認 15 setB(255); 16 invalidate(); 17} 18}

このようにカスタムビュー(と思われるもの)のファイルでは書いてあるのですが、コードに書いてあるようにログを入れて再描画されているか確認しました。すると、colchange()メソッドが呼び出されているのは確認できたのですが、onDraw()内のログが出力されていなかったためinvalidate();が効いていないことが分かりました。

説明が長くなりましたが対処方法を教えてください、お願いします。

###追記
調べた中で、階層を成しているViewは上層のものをinvalidate();しないという記事を発見しました。なので、以下の記述を操作するメインのjavaファイルに加えました。
※記述した場所は色々なメソッドを書いている部分の一部です

java

1@Override 2public boolean onTouchEvent(Motion event){ 3} 4---省略(様々なメソッド) 5public void activechange(){ 6PercentFrameLayout percentFrameLayout; 7 percentFrameLayout = (PercentFrameLayout)findViewById(R.id.pfl); 8 percentFrameLayout.invalidate(); 9}

しかし、以下のエラーが出ました。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference

なぜなのかわかりません。
・追記:抜けていたxmlファイルのidの記述を追加しました。
・追記:onCreateの部分を記述します。

java

1@Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 Intent i4 = getIntent(); 5 LR = i4.getStringExtra("LR"); 6 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 7 //setContentView(R.layout.activity_main); 8 //ステータスバー非表示 9 getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); 10 //タイトルバー非表示 11 requestWindowFeature(Window.FEATURE_NO_TITLE); 12 setNavigationbarHide(this, true); 13 14 LayoutInflater factory = LayoutInflater.from(this); 15 View view = factory.inflate(R.layout.activity_game, null); 16 setContentView(view); 17 18 Random rnd = new Random(); 19 WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE); 20 Display dp = wm.getDefaultDisplay(); 21 Point po = new Point(); 22 dp.getSize(po); 23 winW = po.x; 24 winH = po.y; 25 perpower = 20; 26 spower = rnd.nextInt(perpower); 27 forspower = (int)(1000 * (1 / spower)); 28 rpower = winW - ((winW * 0.05) + (winW * spower));//右(利き)基準 29 lpower = (winW * 0.25) - (winW * spower);//左(利き)基準 30 stamina = 10 + rnd.nextInt(30);//時間耐久度 31 }

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

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

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

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

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

fcrow

2017/04/19 12:13

追記されたjavaコードをどこに追加したか回答の重要な手掛かりになると思われます。前後のjavaコードも記載した方がよいでしょう。
ko20vonobird

2017/04/19 13:17 編集

文章とコードを追記いたしました。ご指摘ありがとうございます。
guest

回答2

0

activechange() を呼び出している箇所のコードが知りたかったのですが・・・
出力されているエラーを見る限りでは ココ と同じ問題ではないかと思われます。

投稿2017/04/19 15:46

fcrow

総合スコア96

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

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

ko20vonobird

2017/04/19 15:53

失礼しました、activechange()を呼び出しているコードは別ファイルにありますので前後という言葉から思い浮かびませんでした。以下にコードを記します。 public void colchange() { Log.d("colchange", "true"); col = "ch"; setB(255); gm.activechange(); } gmはactivechange()があるファイルのクラスを表しています。このメソッドはカスタムビュー(と思われるもの)のあるファイルに存在します。
fcrow

2017/04/19 16:17

まずはunikoさんがコメントされている処置を行うのが良いでしょう。 (そのうえで activechange() の中身を setContentView の後に移植する必要がある・・・はず。)
ko20vonobird

2017/04/19 16:39

ご指導ありがとうございます。unikoさんとのコメントに書いた通りなのですが、エラーが発生しました。エラーの詳細はunikoさんとのコメントに書いてあります。
fcrow

2017/04/19 16:50

> android.util.AndroidRuntimeException: requestFeature() must be called before adding content 「コンテンツを追加( setContentView )する前に requestFeature() を呼び出せ」と言っています。 おそらく requestWindowFeature(Window.FEATURE_NO_TITLE); あたりを setContentView の後に呼び出しているのではないでしょうか。
ko20vonobird

2017/04/20 03:03

おっしゃる通りです。なので、記述をもろもろの後に移動させたのですが、同じエラーと別のエラーが発生しました。同じエラーというのは架空のものを呼び出しているといったもののエラーです。
ko20vonobird

2017/04/20 12:55

無事invalidateが効くようになりました、回答頂きありがとうございました。
fcrow

2017/04/21 03:12

最後まで手助けするには至りませんでしたが、解決されたようで何よりです。
guest

0

ベストアンサー

カスタムビューでonDrawを独自に行っていますので、Designgame側setWillNotDraw(false)とセットしてみてください。willNotDrawがtrueだとonDrawがスキップされます。
こちらが問題であれば親のViewGroupでinvalidate()する必要はありません。
記載頂いているコードが抜粋でしたので、すでにコンストラクタ等でセットされていれば申し訳ありません。

なお、こちらでCustom Viewに関してのお話があります。
Google I/O 2013 - Writing Custom Views for Android

追記内容について。
記載のXMLを見るにPercentFrameLayoutにはidが設定されていないようです。
なので原因は未定義ではないしょうか?
もし現状ではidを設定していてビルドも通ると言う事であれば一度クリーンビルドしてみて試してください。


解決内容が変わっているため追記(コメントの内容から)
原因としてはinvalidateするカスタムビュー(Designgameクラス)が、
インスタンス化しただけでaddViewをしていない状態のものを利用していたため起きた状態。
xmlに元々セットしているのでDesigngameクラスをfindViewByIdで取得しご利用ください。

投稿2017/04/19 13:50

編集2017/04/20 13:26
uniko

総合スコア448

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

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

ko20vonobird

2017/04/19 15:08

回答ありがとうございます。カスタムビューのお話は40分と長いので後でじっくり見させていただきます。 まず、setWillNotDrawですが、試してみましたがinvalidate();は効きませんでした。 そして、idについてですが、最初に質問させていただいていた当初記入を忘れており、記述させていただきましたのでこちらのコードでも訂正させていただきました。その後、クリーンビルドというものを調べ実行し、再度アプリを実行してみたのですが、やはり同じエラーが出ます。
uniko

2017/04/19 15:18

setWillNotDrawはダメでしたか。 追記の方の話になりますがfindViewByIdをしているメインというのはActivityと思っていますが違いますか? Designgame内で行ってはいませんよね?
ko20vonobird

2017/04/19 15:26

はい、Activityを継承しているクラスが存在するJavaファイルでfindViewByIdをしています。
uniko

2017/04/19 15:39

なるほど。findViewByIdはsetContentView後に行わないとそもそも例外がでてしまうのですが、onCreate内のsetContentView後に行ってもpercentFrameLayout はNullになりますでしょうか?
ko20vonobird

2017/04/19 15:49

今までsetContentViewはonCreateではなくonResumeから呼び出すメソッド内で行っているのですが、それだとやはり不具合は出るのでしょうか?しかし、一方でその再描画はタッチイベントを取得した際に行っているものです。
uniko

2017/04/19 15:55

いえsetContentViewはonCreateで行ってください。 https://developer.android.com/reference/android/app/Activity.html もしかしたらと思いますが、androidのライフサイクル等も知らない場合は見てみた方がよいかと思います。とりいそぎですがonResumeからではなくonCreateで行ってください。もしかしたらもろもろ直るかもしれません。
ko20vonobird

2017/04/19 16:37

ライフサイクルについて追々調べさせて頂きます。 onCreateの最初に持ってきたのですが、それで実行したところ、以下のエラーが出ました。 Performing stop of activity that is not resumed: {com.gmail.archerygame/com.gmail.archerygame.Explain} java.lang.RuntimeException: Performing stop of activity that is not resumed: {com.gmail.archerygame/com.gmail.archerygame.Explain} ---省略 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gmail.archerygame/com.gmail.archerygame.Game}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content
uniko

2017/04/19 16:54

requestFeature() must be called before adding contentと言う事と最初に持ってきたと言う事ですので、もしもsetContentViewより後にrequestWindowFeature等の設定をしている場合であればその後にsetContentViewを行わないといけません。 例えば以下のような形なります。 Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); それが原因でないなら、ちょっとこれだけだと分からないので可能であればonCreate部分を記載していただけると助かります。
ko20vonobird

2017/04/20 03:05

記述を移動させたのですが、同じエラーなどが出現しました。まずは、onCreateを追記しようと思います。
ko20vonobird

2017/04/20 03:16

続いて新たに出たエラーをここに書かせていただきます。 [MigrateUtil] Exception while checking whether temporary directory is writable java.io.IOException: open failed: ENOENT (No such file or directory) at java.io.File.createNewFile(File.java:939) at grw.a(:com.google.android.gms:78) at com.google.android.gms.backup.component.ComponentEnabler.a(:com.google.android.gms:69) at jjb.onHandleIntent(:com.google.android.gms:94) at com.google.android.chimera.IntentOperation.onHandleIntent(:com.google.android.gms:118) at byv.run(:com.google.android.gms:1864) at bys.run(:com.google.android.gms:1143) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) at libcore.io.Posix.open(Native Method) at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) at java.io.File.createNewFile(File.java:932) at grw.a(:com.google.android.gms:78)  at com.google.android.gms.backup.component.ComponentEnabler.a(:com.google.android.gms:69)  at jjb.onHandleIntent(:com.google.android.gms:94)  at com.google.android.chimera.IntentOperation.onHandleIntent(:com.google.android.gms:118)  at byv.run(:com.google.android.gms:1864)  at bys.run(:com.google.android.gms:1143)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  at java.lang.Thread.run(Thread.java:818
uniko

2017/04/20 04:34 編集

記載ありがとうございます。onCreate側のエラーですが同じ内容という事ですが起きている場所はどこでしょうか?onResume側でWindow操作はしていませんよね? 一応、こちらの環境(OS5.1)で新規でActivityを用意して記載いただいた内容ママを入れ動かしたら動くので。。 また、その際にsetNavigationbarHideという独自メソッドと変数周りは適当にし、xmlのDesigngame箇所は確認ついでにonDraw部分にLogだけいれたCustomViewを用意して行っています。 ちなみにそのCustomViewはinvalidateしたらonDrawもしていますね。
uniko

2017/04/20 04:33

新規にでたというエラーですがこのアプリってファイル操作したりGMS使ってますか? このアプリ側のエラーではない気がするのですが。。
ko20vonobird

2017/04/20 05:18

onResume側でWindow操作はしていません。起きている場所は以下の記述の部分で、メソッド:activechangeの中です。 percentFrameLayout = (PercentFrameLayout)findViewById(R.id.pfl); unikoさんの方で動くということは、こちらの未確認の部分に原因があるのですね。もっとコードが見たいということであれば出します。 ファイル操作やGMSの使用はありませんね。。もしかしたら新しく出たと言いましたが見落としていたのかもしれません。
uniko

2017/04/20 05:41

activechangeで起きたNullPointerExceptionの話ですかね? すいません、android.util.AndroidRuntimeException: requestFeature() must be called before adding contentの例外だと思っていました。。 再度確認なのですが、findViewByIdをしているメインというのはActivityと言う話でしたが、activechangeというメソッドはActivity側に用意されていますか? fcrowさんの回答にあるコメントでgm.activechange();とありカスタムビュー側に存在のような話ですが。
ko20vonobird

2017/04/20 05:54

Activity側に用意されています。 どのようにメソッドが呼ばれるかというと、まずActivity側のタッチイベントからカスタムビュー側のメソッドが呼ばれ、そこで色の変数をを設定した後setWillNotDrawつまりinvalidate();が効かないのでgm.activechangeでactivity側のメソッドつまりactivechangeを呼びビューの大元で上層のPercentFrameLayoutつまり全体を再描画しようと試みています。そこでエラーが発生します。
uniko

2017/04/20 06:08

と言う事はgm.activechangeのgmってActivityなんですよね。。もしかしてgmに入れているのってnew Activityとかしちゃってますか?Activityはこちらでインスタンス化しないのですが、念のための確認です。
uniko

2017/04/20 06:40 編集

とりあえずですが、もしnewしちゃったりしてる場合でではどうしたらいい?と言う状態であれば 1.gm.activechange();の部分はコメントアウトなり消すなりする。 2.Activity側のタッチイベント内のカスタムビュー側のメソッドが呼ばれた下にactivechange();と入れてみてください。 2の部分は今までのコメント等からカスタムビュー側のメソッドをcolchange()と仮定した場合で言うと @Override public boolean onTouchEvent(Motion event){ //各処理 colchange(); activechange(); //各処理 } こんな感じです。 場所がonTouchEventでなかったらごめんなさい。
ko20vonobird

2017/04/20 09:32 編集

改変したところ、エラーは無くなりました。しかし、まだ再描画されたように見えないのですが、実はcolchange();もdg.colchange();というふうにカスタムビューのインスタンスを取得するような感じで指定しているのですが、これもまずいですか?
uniko

2017/04/20 09:38

dg.colchange();で問題ないですよ。 colchange()はカスタムビューからの呼び出しでたね。むしろ自分のほうの記載が間違いです。すいません。 えっと本題ですがLogは変わらずと言う事ですよね? 多分普通にinvalidateしても呼ばれてないようでしたので予測はできたのですが。。 dgってどこでどのような風にセットしていますでしょうか?
ko20vonobird

2017/04/20 09:42

dgはonCreateでdg = new Designgame(this);というようにセットしています。Activityのあるファイルの中で、です。
uniko

2017/04/20 09:53

なるほど、全ての原因はそこな気が。 そのdgはPercentFrameLayoutにaddViewしていますか?していなければActivityにはアタッチ(取付け)られてない状態ですので動いてないです。 また、xml側にDesigngameを入れていてそのレイアウトファイルをsetContentViewしているのですが、そちらを使うイメージでnew Designgame(this);という風にしているのであれば間違いになります。 xml側でsetContentViewをしたViewを取り出すにはsetContentView後(行った後すぐと言う意味ではありません)にfindViewById等で見つけて取りだします。 先ほど問題になったPercentFrameLayoutも同じようにして見つけているかと。 今回で言うと利用しているレイアウトにあるDesigngameクラスのidがsousaと言う事ですので、 dg = (Designgame)findViewById(R.id.sousa); というようになります。 お試しくださいませ。
ko20vonobird

2017/04/20 10:06

dg.colchange();はどうすれば良いのでしょうか? dg = new Designgame(this); から dg = (Designgame)findViewById(R.id.sousa); になってもメソッドを変わらず呼び出せますか?
uniko

2017/04/20 10:09 編集

xmlのcom.gmail.archerygame.Designgameと、newしているDesigngameは同じクラスですよね?同じであれば呼び出せますが。
ko20vonobird

2017/04/20 10:14

ありがとうございます、同じクラスです。さっそく試してみます。
ko20vonobird

2017/04/20 10:19

度々すいません、dgをaddViewするということですが、 view.addView(dg)をイメージしていたのですがないということで、どうすれば良いのか教えていただけますか?
uniko

2017/04/20 10:26

ん?dgはどこかにaddViewをしていたのですか? それとも単純にxmlからではなくaddViewで追加するやり方が知りたいと言う話でしょうか?
ko20vonobird

2017/04/20 10:33 編集

addViewで追加するやり方のことです、必須なのですよね?
uniko

2017/04/20 10:40 編集

必須ですか? new Designgame(this)のようにコード内で用意してActivityに表示されるViewGroupに追加するのであれば必要です。 xml内ですでにセットしていれば必要はありません。 ただ、ベースになるレイアウトをxmlで用意しその後に追加するのであれば必要です。 ただ今回の質問とは別の内容になってしまいますので、ここではinvalidateの解決に専念をお願いします。
ko20vonobird

2017/04/20 10:54 編集

混乱しているのですが、いずれのinvalidateを使うにせよ解決するにせよaddViewが必要である、ということではないのでしょうか?間違っていたらごめんなさい。
uniko

2017/04/20 11:08

記載しているxmlにはidがsousaで設定されたDesigngameクラスが入ってます。 ですのでそのレイアウトをsetContentViewで利用した時点でDesigngameはActivityに入っています。 ようはすでにaddViewされている状態と言う事ですね。 もしも、その後にnew Designgameで作成しaddViewをした場合は ・idがsousaのDesigngame ・idが不明(ここら辺は必要なら別途セット)のDesigngame の二つがActivityに表示されるというわけです。 ですのでDesigngameというのは一つしか必要ないというのであれば xmlにセットしていないならnew Designgameで作成しaddViewをして追加する必要がでますが、xmlにセット済みであれば必要ありません。 分かりづらければすいません。
ko20vonobird

2017/04/20 11:17

つまり、今のカスタムビューのファイルに記述されたデザインで事足りるというのであればもうすでにsetContentViewの際にaddViewもされているようなものなのでこのままで良いということですね? しかし、ということはxmlには上記の形でカスタムビューをセットしておりdgも直したので動いてほしいのですが、未だ再描画されないですね。。ちなみに再描画されているかどうかは色の変化とログでチェックするようにしています。
uniko

2017/04/20 11:34

はい。現にaddViewせずとも最初の描画はされていますよね? うーんまだされませんか。。 ということはログは最初の描画のときのみと言うことですね。
ko20vonobird

2017/04/20 11:39

はい、最初の描画はされています。 そうですね、最初の描画の時のみonDrawの中のログが出力されます。
uniko

2017/04/20 11:56

処理はactivechange()に記載された方法ですか? 単純にdgに対しinvalidateしたらログはでないでしょうか?(ようは最初ダメだった方の処理) これでダメならactivity等のコードを記載いただかないと分からないです。
uniko

2017/04/20 12:06

ちなみにですがsetBackGroundColor等は正常に動作はしていますか?
ko20vonobird

2017/04/20 12:56 編集

初めてdg.invalidate();としたところ、ログも出て色も変わりinvalidate()が効くようになりました。解決しました、長いやりとりも終始丁寧で分かりやすかったです、ありがとうございます。 ちなみにsetBackGroundColorは消してしまった模様ですが、確かあったときは効いていなかったと思います。
uniko

2017/04/20 13:05 編集

ようございました。activechange()でやっているような処理は普段しないので私の環境でやったら同様にダメでした。 調べたところハードウェアアクセラレーションが原因のようです。 https://groups.google.com/forum/#!topic/android-sdk-japan/QxEnJozD96M 上記のフォーラムの内容と同様の対応をしたらactivechange()の処理でも動く事は確認しました。 でも更新したいのは全体ではなくDesigngameだけなので単純にViewのinvalidateのほうがいいでしょう。なのでko20vonobirdさんの見たという情報が古い内容かもしれませんね。 いずれにしてもお疲れ様でした。 今回の質問の回答としては ・単純にnew Designgame(this); としてしまっていたというのが解決ですね。 こちらもこの問題を見つけるまではこの部分は基本的な事と勝手に認識し問題ないだろうと進めており、問題と関係ない問題で紆余曲折してしまった感があり申し訳なく思います。
uniko

2017/04/20 13:07

最後に問題とは関係ないですが もしかしたら基本的な話で参考になるやもという所で資料になりそうなリンクを記載しておきます。 Androidの公式チュートリアル https://developer.android.com/training/basics/firstapp/index.html?hl=ja Tech Institute http://techinstitute.jp/material/01/ *ちょっと古いですが日本語かつ各資料が無料でDLできるようです。 それとaddViewのやり方については こちら辺りを見てみて、とりあえずLinearLayoutやRelativeLayoutに対して子ビューを追加する練習をしてみるとよいかもしれません。 https://www.javadrive.jp/android/linearlayout/ https://www.javadrive.jp/android/relativelayout/ 以上です。
uniko

2017/04/20 13:16

あ。。さらに最後すいません。 setBackGroundColorのほうのお話はnew Designgameをしていたので効かなかっただけかと。 もし必要になった際は今度は大丈夫かと思いますよ。
ko20vonobird

2017/04/20 13:32

最後の最後まで丁寧にしていただき恐縮です。リンクありがとうございます、順番に勉強させていただきます。なるほど、newはする機会は限られるのですね。最後までありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問