2011-01-08 38 views
2

我可能試圖在這裏一次問太多,但任何聖潔,耐心的Android大師誰可以幫我一點點,可能會從我的項目拯救失敗。Android - 一個佈局,表面視圖和帆布難題

我正在製作一個裝扮娃娃應用程序,用戶可以在另一個視圖中將物品從「服裝庫存」視圖拖到「娃娃」視圖。首先,我不知道如何在不同的視圖中使用玩具娃娃和庫存,並且仍然能夠在兩者之間拖動位圖。 (繪製和拖動位圖本身不是問題)。

到目前爲止,我所能得到的所有工作都是使用一個擴展的SurfaceView,我將其編程添加到我的佈局中,並使用線程繪製到其Canvas。在畫布的一邊,我畫了組成玩偶的bitmpas。另一方面,我繪製了構成庫存的位圖。它可以很好地工作,但我需要能夠將它分成兩個視圖,因爲a)玩偶視圖的高度需要大於庫存視圖的高度,並且b)我想重新使用在其他地方的兩種意見,在不同的活動中。

因此,最後,我的問題是:如何在兩個表面視圖的Canvases之間共享位圖?或者,我可以有一個畫布覆蓋整個屏幕上的其他視圖(按鈕TextView等)放在它的頂部?或者,有沒有其他更合乎邏輯的方式去做我試圖通過我的東西?如果我有兩個SurfaceView,每個都有一個由線程控制的Canvas,那麼我將如何處理這一事實:我拖動的位圖可能同時部分地「在」Canvases的兩個區域「內部」? (我真的只想要一個屏幕大小的畫布,不是嗎?)

根據下面的Layout XML,我們將它稱爲DollView的主動添加的SurfaceView添加到一個空的嵌套RelativeLayout。我繼續通過將Button添加到佈局XML來不斷改進事物,這些XML以某種方式出現在DollView之上,並且不受持續繪製和重新繪製DollView畫布的影響。當我拖動服裝物品或玩偶片的位圖時,它會在這些按鈕下面傳遞... 如果我在DollView的父親RelativeLayout的指定寬度外拖動位圖,我仍然可以「保留」它,它回到了視野,但它並沒有畫在屏幕上。完全被這個難住了,儘管這是我現在問題最少的問題。

我可以顯示任何對這種瘋狂感興趣的人,儘可能多的代碼,因爲他們希望看到。感謝您的支持。我希望閱讀它不會像解釋它傷害我的一樣傷害你的頭。 :)

下面是活動的佈局,被設置爲在OnCreate內容視圖:

<?xml version="1.0" encoding="utf-8"?> 

<TextView android:id="@+id/header_text" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:text="Header text..." /> 

<!-- The extended SufaceView (DollView) is programatically added to this RelativeLayout --> 
<RelativeLayout android:id="@+id/doll_layout" 
    android:layout_width="350dip" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/header_text" 
    android:layout_alignParentLeft="true" /> 

<TextView android:id="@+id/stats" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_below="@+id/header_text" 
    android:layout_toRightOf="@+id/doll_layout" 
    android:layout_alignParentRight="true" 
    android:text="Stats text..." />  

<TableLayout android="@+id/stats_table" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_below="@+id/stats" 
    android:layout_toRightOf="@+id/doll_layout" 
    android:layout_alignParentRight="true"> 

<TableRow> 
<TextView android:id="@+id/stat_one" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:text="stat one..." /> 

<TextView android:id="@+id/stat_one_score" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="0" /> 

<TextView android:id="@+id/stat_one_mod" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:text=" " /> 

</TableRow> 
<TableRow> 
<TextView android:id="@+id/stat_two" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:text="stat two..." /> 

<TextView android:id="@+id/stat_two_score" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:text="0" /> 

<TextView android:id="@+id/stat_two_mod" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:text=" " /> 
</TableRow> 

<TableRow> 
<Button android:id="@+id/stats_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="stats" /> 

<Button android:id="@+id/info_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="info" /> 

<Button android:id="@+id/help_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="help" /> 
</TableRow> 
</TableLayout> 

<!-- A "dragged" bitmap from the DollView passes underneath this TextView. Why? --> 
<TextView android:id="@+id/doll_name" 
    android:textSize="16sp" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/header_text" 
    android:layout_alignParentLeft="true" 
    android:text="" /> 

<!-- dragged bitmaps pass under all of these buttons too, apart from the last three 
    nav buttons, as they're outside the DollView's width. 
    How would I make the dragged bitmaps pass OVER these objects, instead? --> 
<Button android:id="@+id/nav_btn1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/nav_btn2" 
    android:text="nav1" /> 

<Button android:id="@+id/next_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/nav_btn1" 
    android:layout_centerHorizontal="true" 
    android:text="Next" /> 

<Button android:id="@+id/prev_btn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/nav_btn1"   
    android:layout_toLeftOf="@+id/next_btn" 
    android:text="Previous" /> 

<Button android:id="@+id/nav_btn2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/nav_btn3" 
    android:text="nav2" /> 

<Button android:id="@+id/nav_btn3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/nav_btn4" 
    android:text="nav3" />  

<Button android:id="@+id/nav_btn4" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/nav_btn5" 
    android:text="nav4" /> 

<Button android:id="@+id/nav_btn5" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@+id/nav_btn6" 
    android:text="nav5" /> 

<Button android:id="@+id/nav_btn6" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:text="nav6" /> 

+0

有什麼我可以做,使這個問題更清楚了嗎?我真的很傷心在這裏得到一些幫助:) – JimBadger 2011-01-10 09:54:22

回答

1

最好的方法是將你的Surfaceview添加爲RelativeLayout的一個子元素。那麼另一個視圖將成爲RelativeView的另一個孩子。這樣畫布畫就不會受到干擾。

http://groups.google.com/group/android-developers/browse_thread/thread/b3917e04d47fb27f?pli=1

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); 

    layout = new RelativeLayout(this); 
    RocketView rocketView; 
    rocketView = new RocketView(this); 
    layout.addView(rocketView); 
    setContentView(layout); 
} 
0

爲2D遊戲,我強烈建議使用AndEngine。這是免費使用的,當你準備在市場上出售遊戲時,沒有什麼可擔心的。該項目是開源的,但只需使用其編譯庫快速開始使用它。

用於顯示演示的視頻,因爲他們的支持論壇 http://www.andengine.org/blog/

http://www.andengine.org/forums/

入門andEngine: http://www.andengine.org/forums/tutorials/getting-started-with-andengine-t11.html

這將是一個有點工作,爲您最初使用它,但一旦你知道基礎知識,它使用起來非常神奇。

+0

嗯,謝謝,我一定會詳細閱讀。然而,這是我非常想做的事情,併爲自己理解(除了這個問題的求助呼籲外):) 此外,我的應用中沒有足夠的「遊戲」需要引擎。只需一個屏幕即可移動圖像。 雖然,讚賞。 – JimBadger 2011-01-08 21:49:53