Main.view2.setVisibility(View.GONE);
ですかね?
> としている際にView1(SurfaceView)からView2のsetVisibilityがエラーになります。
の内容を見ればわかると思いますが。
ではでは。
2011年5月29日22:10 teas <ast...@redcave.net>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com
> にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja
> からこのグループにアクセスしてください。
>
--
----
awwa <aww...@gmail.com>
Twitter http://twitter.com/awwa500
Blog http://awwa500.blogspot.com/
あわです。
添付されていたソースを実行してみました。
Logcatのエラーは以下です。
「Only the original thread that created a view hierarchy can touch its views.」
つまり「viewを生成したスレッドしかそのviewをいじっちゃダメよ。」って意味です。
そういうときはHandlerを使って元のスレッドにviewの制御をやってもらうように依頼します。
全体的な設計思想からこういう書き方が適切かはわかりませんが、
とりあえず、最低限の修正でただ動けばいいという意味であれば、
以下のように修正すればOKです。
※このままだとあまりかっこ良くないのであくまでもヒント程度に考えてくださいね。
一、testSurface2#run()を以下のように修正します。
public void run() {
while (mainLoop != null) {
now = System.currentTimeMillis();
if(now - now2 > 10000){
now2 = now;
//Main.test.setVisibility(Main.frameLayout.GONE); // modif
handler.sendMessage(handler.obtainMessage(AAA, View.GONE)); // modif
}
Canvas canvas = holder.lockCanvas();
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL);
canvas.drawRect(100, 200, 200, 300, paint);
holder.unlockCanvasAndPost(canvas);
}
}
ニ、testSurface2クラスにHandlerとメッセージ識別子(なんでもいいけどとりあえずAAA)の定義を追加
private static final int AAA = 0;
private Handler handler = new Handler() {
@Override
public void dispatchMessage(Message msg)
{
switch ( msg.what )
{
case AAA:
Main.test.setVisibility(Main.frameLayout.GONE);
break;
}
}
};
と、とりあえず。
2011年5月30日17:50 teas <ast...@redcave.net>:
> 添付のファイルのtestSurface2内で処理しています。