質問編集履歴
6
onCreateの記述
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -100,4 +100,38 @@
|
|
|
100
100
|
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
|
|
101
101
|
```
|
|
102
102
|
なぜなのかわかりません。
|
|
103
|
-
・追記:抜けていたxmlファイルのidの記述を追加しました。
|
|
103
|
+
・追記:抜けていたxmlファイルのidの記述を追加しました。
|
|
104
|
+
・追記:onCreateの部分を記述します。
|
|
105
|
+
```java
|
|
106
|
+
@Override
|
|
107
|
+
protected void onCreate(Bundle savedInstanceState) {
|
|
108
|
+
super.onCreate(savedInstanceState);
|
|
109
|
+
Intent i4 = getIntent();
|
|
110
|
+
LR = i4.getStringExtra("LR");
|
|
111
|
+
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
|
112
|
+
//setContentView(R.layout.activity_main);
|
|
113
|
+
//ステータスバー非表示
|
|
114
|
+
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
|
115
|
+
//タイトルバー非表示
|
|
116
|
+
requestWindowFeature(Window.FEATURE_NO_TITLE);
|
|
117
|
+
setNavigationbarHide(this, true);
|
|
118
|
+
|
|
119
|
+
LayoutInflater factory = LayoutInflater.from(this);
|
|
120
|
+
View view = factory.inflate(R.layout.activity_game, null);
|
|
121
|
+
setContentView(view);
|
|
122
|
+
|
|
123
|
+
Random rnd = new Random();
|
|
124
|
+
WindowManager wm = (WindowManager)getSystemService(WINDOW_SERVICE);
|
|
125
|
+
Display dp = wm.getDefaultDisplay();
|
|
126
|
+
Point po = new Point();
|
|
127
|
+
dp.getSize(po);
|
|
128
|
+
winW = po.x;
|
|
129
|
+
winH = po.y;
|
|
130
|
+
perpower = 20;
|
|
131
|
+
spower = rnd.nextInt(perpower);
|
|
132
|
+
forspower = (int)(1000 * (1 / spower));
|
|
133
|
+
rpower = winW - ((winW * 0.05) + (winW * spower));//右(利き)基準
|
|
134
|
+
lpower = (winW * 0.25) - (winW * spower);//左(利き)基準
|
|
135
|
+
stamina = 10 + rnd.nextInt(30);//時間耐久度
|
|
136
|
+
}
|
|
137
|
+
```
|
5
コードの修正
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
<android.support.percent.PercentFrameLayout
|
|
9
9
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
10
10
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
11
|
+
android:id="@+id/pfl"
|
|
11
12
|
android:layout_width="match_parent"
|
|
12
13
|
android:layout_height="match_parent"
|
|
13
14
|
android:gravity="top">
|
|
@@ -98,4 +99,5 @@
|
|
|
98
99
|
```
|
|
99
100
|
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
|
|
100
101
|
```
|
|
101
|
-
なぜなのかわかりません。
|
|
102
|
+
なぜなのかわかりません。
|
|
103
|
+
・追記:抜けていたxmlファイルのidの記述を追加しました。
|
4
追記
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
|
|
83
83
|
###追記
|
|
84
84
|
調べた中で、階層を成しているViewは上層のものをinvalidate();しないという記事を発見しました。なので、以下の記述を操作するメインのjavaファイルに加えました。
|
|
85
|
-
**※記述した場所は色々なメソッドを書いている部分です**
|
|
85
|
+
**※記述した場所は色々なメソッドを書いている部分の一部です**
|
|
86
86
|
```java
|
|
87
87
|
@Override
|
|
88
88
|
public boolean onTouchEvent(Motion event){
|
3
追記の追記
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -82,10 +82,17 @@
|
|
|
82
82
|
|
|
83
83
|
###追記
|
|
84
84
|
調べた中で、階層を成しているViewは上層のものをinvalidate();しないという記事を発見しました。なので、以下の記述を操作するメインのjavaファイルに加えました。
|
|
85
|
+
**※記述した場所は色々なメソッドを書いている部分です**
|
|
85
86
|
```java
|
|
87
|
+
@Override
|
|
88
|
+
public boolean onTouchEvent(Motion event){
|
|
89
|
+
}
|
|
90
|
+
---省略(様々なメソッド)
|
|
91
|
+
public void activechange(){
|
|
86
92
|
PercentFrameLayout percentFrameLayout;
|
|
87
93
|
percentFrameLayout = (PercentFrameLayout)findViewById(R.id.pfl);
|
|
88
94
|
percentFrameLayout.invalidate();
|
|
95
|
+
}
|
|
89
96
|
```
|
|
90
97
|
しかし、以下のエラーが出ました。
|
|
91
98
|
```
|
2
タイトルと説明の改変
title
CHANGED
|
@@ -1,1 +1,1 @@
|
|
|
1
|
-
invalidate();で再描画され
|
|
1
|
+
invalidate();で再描画されず、調べるとそれ自体が効いていないです
|
body
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
###発生している問題
|
|
2
|
-
invalidate();でonDraw();が再描画されな
|
|
2
|
+
invalidate();でonDraw();が再描画されなく、ログ出力で調べたところinvalidate();が効いていないことが判明しました。
|
|
3
3
|
|
|
4
4
|
###現在の状況
|
|
5
5
|
xmlファイルとカスタムビュー(と思われるもの)を扱うファイル、そして操作するためのファイルがあります。xmlファイルでは、
|
1
追記を記述。
title
CHANGED
|
File without changes
|
body
CHANGED
|
@@ -78,4 +78,17 @@
|
|
|
78
78
|
```
|
|
79
79
|
このようにカスタムビュー(と思われるもの)のファイルでは書いてあるのですが、コードに書いてあるようにログを入れて再描画されているか確認しました。すると、colchange()メソッドが呼び出されているのは確認できたのですが、onDraw()内のログが出力されていなかったためinvalidate();が効いていないことが分かりました。
|
|
80
80
|
|
|
81
|
-
説明が長くなりましたが対処方法を教えてください、お願いします。
|
|
81
|
+
説明が長くなりましたが対処方法を教えてください、お願いします。
|
|
82
|
+
|
|
83
|
+
###追記
|
|
84
|
+
調べた中で、階層を成しているViewは上層のものをinvalidate();しないという記事を発見しました。なので、以下の記述を操作するメインのjavaファイルに加えました。
|
|
85
|
+
```java
|
|
86
|
+
PercentFrameLayout percentFrameLayout;
|
|
87
|
+
percentFrameLayout = (PercentFrameLayout)findViewById(R.id.pfl);
|
|
88
|
+
percentFrameLayout.invalidate();
|
|
89
|
+
```
|
|
90
|
+
しかし、以下のエラーが出ました。
|
|
91
|
+
```
|
|
92
|
+
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference
|
|
93
|
+
```
|
|
94
|
+
なぜなのかわかりません。
|