2016-12-12 70 views
0

我是一個新手,我一直在嘗試爲我想出的抽象遊戲製作一個界面。對齊佈局外的對象

我有一個5x5單元板,我有這些單元格中的瓷磚。 我想製作動畫,其中的圖塊從屏幕頂部落入它們在單元格中的位置,所以我一直在嘗試從最頂層的佈局中對齊單元格內的圖塊。

我知道我可以將tile代碼放在最底部的佈局中,單元格本身,但是如果我這樣做,它們不會正確地動畫,因爲元素僅在其父級的約束內顯示。

這裏是我的XML:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#eeeeee" 
tools:context="com.example.althis.testsequence.FullscreenActivity"> 

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:background="@drawable/rectangle" 
    > 
    <Button 
     android:id="@+id/tile1" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:backgroundTint="@color/tile_color" 
     android:text="1" 
     android:textColor="@color/white" 
     android:textSize="35dp"/> 

    <com.example.me.testsequence.Square_Linear_Layout 
     android:layout_width="match_parent" 
     android:layout_height="380dp" 
     android:layout_marginTop="70dp" 
     android:layout_marginLeft="20dp" 
     android:layout_marginRight="20dp" 
     android:background="@drawable/rounded_rectangle"> 
     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_margin="8dp" 
      android:background="@drawable/space" 
      android:orientation="vertical"> 
      <LinearLayout 
       android:layout_margin="1dp" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_weight="1.0" 
        android:orientation="horizontal" 
        android:layout_margin="0dp"> 


        <LinearLayout 
         android:id="@+id/a1" 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         android:layout_weight="1.0" 
         android:orientation="horizontal" 
         android:background="@drawable/space"> 

         <Button 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:backgroundTint="@color/tile_color" 
          android:text="1" 
          android:textColor="@color/white" 
          android:textSize="35dp"/> 
        </LinearLayout> 

       </LinearLayout> 

       <LinearLayout> 
       </LinearLayout> 

       <LinearLayout> 
       </LinearLayout> 

       <LinearLayout> 
       </LinearLayout> 

       <LinearLayout> 
       </LinearLayout> 

      </LinearLayout> 
     </LinearLayout> 
    </com.example.althis.testsequence.Square_Linear_Layout> 
</RelativeLayout> 

我刪除了大部分的重複代碼的可讀性,但最底層的佈局重複5次,每次一行。 a1單元格中的按鈕只是爲了舉例說明我以前如何嘗試過。按鈕對齊正確,但正如我所提到的,它不能正確動畫。

那麼,是否有一種更智能的方法來將按鈕與較低佈局上的對象對齊?

+1

嘗試查看GridLayout – NinjaCoder

+0

不起作用。我試過你的建議,問題是我需要將GridLayout放在包含我的電路板的佈局中(這會產生與在電路板佈局頂部切割動畫相同的問題),或者我需要將我的電路板製作成位圖,並將其切成許多小塊,以使其適合單元格或更大的佈局,這只是一團糟。 – Althis

回答

0

我知道你是android dev的新手,但是你的佈局層次結構對於你試圖解決的問題來說過於複雜。您的層次結構的最內層視圖具有多個LinearLayout的8層深度。請首先看看https://developer.android.com/training/improving-layouts/optimizing-layout.html。處理動畫時這非常重要。更深的層次結構需要指數更多的幀時間來佈置不同的視圖。如果在動畫過程中更改視圖的大小/位置,最好在16ms的幀時間內進行。

現在爲動畫的瓷磚。使用傳統的視圖層次結構來繪製板,您只能在父層次結構的邊界內設置動畫效果。如果您想從頂部刪除項目,這意味着您的父級層次結構必須完全匹配您的窗口大小。這樣做會導致棋盤顯然偏離中心。所以一個自定義ViewGroup就是答案。通過計算它們的x/y座標及其寬度和高度來手動佈置子視圖。

自定義ViewGroups的一個很好的tutoral:http://stacktips.com/tutorials/android/how-to-create-custom-layout-in-android-by-extending-viewgroup-class。這不幸的是在Android開發中更高級的話題。我強烈建議你開始簡單,在可能的情況下使用動畫,一旦你的工作結果開始添加眼睛糖果。

如果您試圖實施每一個奇特的動畫,您很可能永遠不會完成您的項目。

+0

感謝您的提示。我現在會研究它,看看我能做些什麼。這是我第一次使用android,但是我對通用編程有很好的把握。這可能夠了。 – Althis