回答によっては1000ポイントまたはそれ以上進呈。

数度の質問で解決した場合は解決後のポイント贈呈もあります。

以下は携帯電話の待ち受け画面で携帯が開閉される度に画像を変えるものです。
画像4枚を交互に表示します。
わからない(不完全)部分がありますのでご指導おねがいいたします。

<a href="http://homepage2.nifty.com/h/MAp2/hatena725.html">コードはこちらのURLです。</a>

回答の条件
  • 1人5回まで
  • 登録:2006/07/29 16:37:53
  • 終了:2006/08/03 14:07:32

ベストアンサー

id:tsyk No.5

tsyk回答回数33ベストアンサー獲得回数42006/07/30 23:47:01

ポイント2000pt

二回目の回答ですが、先ほどの修正だけでは動作しませんでした。

いちおう今回は端末エミュレータで動作を確認しています。

折り畳みを開いた時のイベント通知で画面を再描画しないと画像が更新されないので、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節)を置く

>  }

id:DreamStar

tsyk様

ありがとうございました。これからも質問します。またよろしくお願いいたします。

2006/08/03 14:04:26

その他の回答(4件)

id:aiaina No.1

aiaina回答回数8179ベストアンサー獲得回数1312006/07/29 17:27:49

ポイント60pt

URLが飛ばないようですが??

id:DreamStar

アドレス表示で、・・・725.html">の">の部分をはずして再実行してください。移動します。

あるいはアドレス入力で直接手入力でも移動します。よろしくお願いいたします。

2006/07/29 19:38:28
id:tsyk No.3

tsyk回答回数33ベストアンサー獲得回数42006/07/29 23:31:08

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);

に修正すれば、いけると思います。

id:Ryks No.4

Ryks回答回数3ベストアンサー獲得回数02006/07/30 22:12:04

auですがカシオには「オープンエミーロ」なる機能があります。

そのまんまですねw

id:tsyk No.5

tsyk回答回数33ベストアンサー獲得回数42006/07/30 23:47:01ここでベストアンサー

ポイント2000pt

二回目の回答ですが、先ほどの修正だけでは動作しませんでした。

いちおう今回は端末エミュレータで動作を確認しています。

折り畳みを開いた時のイベント通知で画面を再描画しないと画像が更新されないので、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節)を置く

>  }

id:DreamStar

tsyk様

ありがとうございました。これからも質問します。またよろしくお願いいたします。

2006/08/03 14:04:26

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません