知識社群登入
位置: 艾鍗學院 Blog > 專業論壇 > 討論
[Android實作問題] 關於surfaceview的問題
1樓

想請問一下關於surfaceview無法畫出的問題

在1個framelayout內放2個surfaceview如下:

<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >

<com.test.MySurfaceView
android:id="@+id/view_draw"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>

<com.test.MySurfaceView_textAnimation
android:id="@+id/view_textAnimation"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>


<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_gravity="left|center_vertical"/>

</FrameLayout>

想達到的目的是:

1. MySurfaceView_TextAnimation在最下層,接著MySurfaceView,最後是button

2. MySurfaceView_TextAnimation只有單純地將一串文字做位移

3. MySurfaceView可以接受onTouchEvent做畫圖的動作。

4. button並不是本問題重點,因此不詳談


遇到的問題:

在MySurfaceView的onTouchEvent中做path的計算,並且利用lockCanvas()及unlockCanvasAndPost()將計算好的path利用Canvas畫出,代碼如下:

@Override
public boolean onTouchEvent(MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {
path = new Path();
path.moveTo(event.getX(), event.getY());
}
else if (event.getAction() == MotionEvent.ACTION_MOVE) {
path.lineTo(event.getX(), event.getY());
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
path.lineTo(event.getX(), event.getY());
}

if (path != null) {

Canvas canvas = sfh.lockCanvas();
canvas.drawPath(path, p);
sfh.unlockCanvasAndPost(canvas);
}

return true;
}

但是若是想要將MySurfaceView_TextAnimation放在最下層,就無法順利畫出path。將MySurfaceView放在MySurfaceView_TextAnimation的下層就可以畫出path


想要請問一下這個層級的關係是甚麼原因導致無法順利的畫出path


有將source code上傳至附件,還請參考,謝謝



附件
1. test.rar (129 KB)