網頁

2011年7月3日 星期日

Android學習_高速繪圖SurfaceView基本架構Part2(Button+SurfaceView)

上個星期天嘗試用SurfaceView作了一個簡單的測試,但是"想像中"不太可能整個畫面都只有一個SurfaceView,應該是會配合一些其他的物件搭配來與使用者互動,比如說按鈕等等。

目標:修改前篇的專案,以按鈕來操作足球的左右。

首先回顧前篇:
1. 在Activity利用setContentView(olaview)的方式將SurfaceView呈現於畫面上。
2. 因為利用上述方法,並不需要在main.xml做任何設定。
3. SurfaceView建構式傳入Context,以識別在何Activity繪圖。
4. 執行setContentView(olaview)就會觸發surfaceCreated事件,直接以此事件觸發繪圖函式。

此篇更改:
1. 改為setContentView(R.layout.main)將SurfaceView呈現於畫面上,並且一併呈現需要的Button。
2. 因為改為設定main.xml為顯示畫面,必須在xml中設定引用的SurfaceView。

<ola.OlaTeach_game1.OlaView
android:id="@+id/olaview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

3. SurfaceView建構式除需傳入Context外,還需傳入AttributeSet,用以傳接該SurfaceView於main.xml的設定內容。
4. 執行setContentView(R.layout.main)後,一樣會觸發surfaceCreated事件。

總結,如果希望SurfaceView像是圖片一樣放在Activity上面,並且可以利用例如Button等元件來控制繪圖結果,必須:
**製作一個含有接收Context與AttributeSet建構式的SurfaceView。

public class OlaView extends SurfaceView implements SurfaceHolder.Callback {
public OlaView(Context context, AttributeSet attrs)
{
super(context,attrs);
//建立相關需要的物件
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
}

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

附上一個小成果圖(左右鍵可以控制足球的左右)

3 則留言:

Unknown 提到...

你好~有完整專案可以分享嗎??

ola的家 提到...

這個要找耶,去年的了,我不確定還在不在。

的麵下 提到...

你好,謝謝大大的無私分享。我是個新手,想請教一下,我寫了
public OlaView(Context context, AttributeSet attrs)
{
super(context,attrs);
接著要如何利用AttributeSet來設定Button呢?可不可以請大大提示,謝謝。

張貼留言