2011-05-20 64 views
3

我正在使用線性佈局從.net服務器獲取帶有圖像的消息。如何將動畫添加到線性佈局?

當新消息到來時,佈局的位置會增加,並且新消息將逐個添加到佈局的頂部。

問題是當新消息到來時,新消息突然添加到佈局中。

我想將動畫應用到佈局,並使我的應用程序像新消息到達時那樣緩慢地將消息添加到佈局。意味着之前的消息緩慢移動,並且新消息被添加到佈局的頂部。

如果任何人有想法請幫助我。

感謝advanse

+1

WCF? WPF? C#? 。淨? – leppie 2011-05-20 09:34:38

回答

4

使用Android:上應保存數據的LinearLayout中animateLayoutChanges。這將在添加新內容時觸發動畫。它首先移動舊數據,爲更多內容騰出空間。接下來的第二步,新數據將淡入可用空間。

實施例代碼

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/baseLL" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 

    <!-- button used to add data --> 
    <Button 
     android:layout_width="192dip" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Add Content" 
     android:onClick="onAddContentClick" /> 

    <!-- button used to remove data --> 
    <Button 
     android:layout_width="192dip" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Remove Content" 
     android:onClick="onRemoveContentClick" /> 

    <!-- data will be added to this LinearLayout at run time --> 
    <LinearLayout 
     android:id="@+id/dataLL" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:animateLayoutChanges="true" 
    > 

    </LinearLayout> 

</LinearLayout> 

basicanimation.java

package com.test.animation.basic; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.LinearLayout.LayoutParams; 
import android.widget.TextView; 

public class BasicAnimationActivity extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void onAddContentClick(View v) { 
     LinearLayout dataLL = (LinearLayout) findViewById(R.id.dataLL); 
     int dataCount = dataLL.getChildCount(); 
     TextView newDataTV = generateData(dataCount); 
     dataLL.addView(newDataTV, 0); 
    } 

    public void onRemoveContentClick(View v) { 
     LinearLayout dataLL = (LinearLayout) findViewById(R.id.dataLL); 
     if (dataLL.getChildCount() > 0) { 
      dataLL.removeViewAt(0); 
     } 
    } 

    private TextView generateData(int dataCount) { 
     TextView TV = new TextView(this); 
     TV.setText("Data " + dataCount); 
     TV.setLayoutParams(new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT, 
       android.view.ViewGroup.LayoutParams.WRAP_CONTENT)); 
     return TV; 
    } 
} 
相關問題