2016-12-12 8 views
0

私はアンドロイドの新人です。私が思い描いた抽象的なゲームのインターフェイスを作ろうとしています。レイアウト外のオブジェクトに合わせる

私は5×5セルのボードを持っています。これらのセルにはタイルがあります。 タイルが画面の上部からセル内の場所に落ちるようなアニメーションを作りたいので、セルの内側のタイルを一番上のレイアウトから揃えようとしています。

私はタイルコードを最もレイアウトの下に置くことができますが、セルそのものですが、そうすると、要素が親の制約の中にのみ表示されるため、正しくアニメーション化されません。

は、ここに私の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デベロッパーには新人だと知っていますが、あなたのレイアウト階層は、あなたが解決しようとしている問題のために非常に複雑です。階層の最も内側のビューは8レベルの深さで、いくつかのLinearLayoutsがあります。最初にhttps://developer.android.com/training/improving-layouts/optimizing-layout.htmlをご覧ください。これは、アニメーションを扱うときに非常に重要です。より深い階層では、異なるビューをレイアウトするために指数関数的に多くのフレーム時間が必要です。アニメーション中にビューのサイズ/位置を変更した場合、これは好ましくは16msのフレーム時間内に発生するはずです。

タイルのアニメーション用。従来のビュー階層を使用してボードを描画すると、親階層の境界内でのみ「タイル」をアニメートできます。アイテムを上から削除したい場合は、親階層がウィンドウサイズに完全に一致している必要があります。そうすることで、ボードが明らかにオフセンターになります。したがって、カスタムViewGroupが答えです。子ビューは、x/y座標とその幅と高さを計算して手動でレイアウトします。

カスタムViewGroupsの素敵なチュートリアル:http://stacktips.com/tutorials/android/how-to-create-custom-layout-in-android-by-extending-viewgroup-class。これは残念なことに、android devのより高度なトピックです。可能であればシンプルなアニメーションを使い始めることを強くお勧めします。また、作業結果に目の保養を追加し始めるとよいでしょう。

すべての派手なアニメーションを実装しようとすると、実際にプロジェクトを終了することはほとんどありません。

+0

チップをありがとう。私は今それを見て、私ができることを見ます。これはアンドロイドで初めての作業ですが、私は一般的なプログラミングについてよく理解しています。それで十分かもしれない。 – Althis

関連する問題