数度の質問で解決した場合は解決後のポイント贈呈もあります。
以下は携帯電話の待ち受け画面で携帯が開閉される度に画像を変えるものです。
画像4枚を交互に表示します。
わからない(不完全)部分がありますのでご指導おねがいいたします。
<a href="http://homepage2.nifty.com/h/MAp2/hatena725.html">コードはこちらのURLです。</a>
二回目の回答ですが、先ほどの修正だけでは動作しませんでした。
いちおう今回は端末エミュレータで動作を確認しています。
折り畳みを開いた時のイベント通知で画面を再描画しないと画像が更新されないので、Canvasクラスのrepaintメソッドを呼ぶ処理を追加します。Canvasクラスのオブジェクトをstart()メソッド内のローカル変数ではなく、クラスのインスタンス変数にしないと、processSystemEvent()メソッド内からアクセスできないので、以下のように変更します。
> public class MAppli2 extends MApplication {
> int i;
> MAppliCanvas2 c;
> public void start() {
> c = new MAppliCanvas2();
> Display.setCurrent(c);
> }
そして、processSystemEvent()メソッド内の else if 節で、
以下のように repaint()メソッドを呼び出します。
> else if (type == FOLD_CHANGED_EVENT && param == 1) {
> i = i + 1;
> i = i % 4;
> c.repaint();
> }
また、MAppliCanvas2クラスにて、Image[]に画像を読み込む処理をpaint()メソッド内に記述すると、再描画のたびに何回も呼ばれてしまってマズイので、MAppliCanvas2クラスにコンストラクタを追加して、そこに移動したほうが良いでしょう。
> MAppliCanvas2() {
> ここにimageの初期化処理(try/catch節)を置く
> }
URLが飛ばないようですが??
アドレス表示で、・・・725.html">の">の部分をはずして再実行してください。移動します。
あるいはアドレス入力で直接手入力でも移動します。よろしくお願いいたします。
while(true)
if (type == FOLD_CHANGED_EVENT && param == 1)
の部分は以下のように修正が必要ですね。
while(true)else if (type == FOLD_CHANGED_EVENT && param == 1) {
さらに、IApplication.getCurrentApp() メソッドを利用すれば変数 i にアクセスすることができるので、
public class MAppliCanvas2 extends Canvas {
Image[] image;
の直後に以下のコード追加して、
MAppli2 app = (MAppli2)IApplication.getCurrentApp();
仕上げに、
g.drawImage(image[i], 0, 0);
この変数 i にアクセスする部分を、
g.drawImage(image[app.i], 0, 0);
に修正すれば、いけると思います。
二回目の回答ですが、先ほどの修正だけでは動作しませんでした。
いちおう今回は端末エミュレータで動作を確認しています。
折り畳みを開いた時のイベント通知で画面を再描画しないと画像が更新されないので、Canvasクラスのrepaintメソッドを呼ぶ処理を追加します。Canvasクラスのオブジェクトをstart()メソッド内のローカル変数ではなく、クラスのインスタンス変数にしないと、processSystemEvent()メソッド内からアクセスできないので、以下のように変更します。
> public class MAppli2 extends MApplication {
> int i;
> MAppliCanvas2 c;
> public void start() {
> c = new MAppliCanvas2();
> Display.setCurrent(c);
> }
そして、processSystemEvent()メソッド内の else if 節で、
以下のように repaint()メソッドを呼び出します。
> else if (type == FOLD_CHANGED_EVENT && param == 1) {
> i = i + 1;
> i = i % 4;
> c.repaint();
> }
また、MAppliCanvas2クラスにて、Image[]に画像を読み込む処理をpaint()メソッド内に記述すると、再描画のたびに何回も呼ばれてしまってマズイので、MAppliCanvas2クラスにコンストラクタを追加して、そこに移動したほうが良いでしょう。
> MAppliCanvas2() {
> ここにimageの初期化処理(try/catch節)を置く
> }
tsyk様
ありがとうございました。これからも質問します。またよろしくお願いいたします。
tsyk様
ありがとうございました。これからも質問します。またよろしくお願いいたします。