SurfaceViewを重ねて表示

2,341 views
Skip to first unread message

poponotan

unread,
May 19, 2011, 5:03:34 PM5/19/11
to 日本Androidの会
はじめまして、ぽぽのたんと申します

最近Androidの開発を始めたのですが、躓いてしまったのでご相談させてください。
FrameLayout内に、複数のSurfaceViewを重ねて表示したいのですが、レイヤーの表示順が入れ替わってしまい困っております。

以下のサンプルで試したところ、初期状態での背景色は赤ですが、onPauseが呼ばれたタイミングで青になってしまいます。
onResumeでred.bringToFront();とかやってみたにですが、効果がありませんでした。

どなかたお知恵をお貸しいただければ幸いです。
よろしくお願いいたします。

public class Test extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

View red = new ColorSurfaceView(this, Color.RED);
View blue = new ColorSurfaceView(this, Color.BLUE);
FrameLayout frame = (FrameLayout) findViewById(R.id.frameLayout1);
frame.addView(red);
frame.addView(blue);
}

class ColorSurfaceView extends SurfaceView implements Callback {

int color;

public ColorSurfaceView(Context context, int color) {
super(context);
this.color = color;
getHolder().addCallback(this);
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
Canvas canvas = getHolder().lockCanvas();
canvas.drawColor(color);
getHolder().unlockCanvasAndPost(canvas);
}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
}
}
}

poponotan

unread,
May 19, 2011, 4:47:04 PM5/19/11
to 日本Androidの会

Python O

unread,
May 20, 2011, 5:17:39 PM5/20/11
to android-g...@googlegroups.com
Androidの描画順はSurfaceインスタンスのZOrder値が大きいものから描画されます。
通常のViewと違って、SurfaceViewは自分自身が自前のSurfaceインスタンスを持っています。
このZOrder値は生成時に自動的に割り振られるので、基本的には自分で制御することはできないんですが、
Android2.0からはSurfaceViewにsetZOrderMediaOverlayやsetZOrderOnTopといった
ZOrder値をある程度制御できるAPIが追加されましたので、そちらを試してみてはいかがでしょうか。

2011年5月20日6:03 poponotan <poponotan.jp@gmail.com>:
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。


Reply all
Reply to author
Forward
0 new messages