Autore Topic: Animation & ListView - Aggiornamenti risultati  (Letto 716 volte)

Offline Dekra

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7 / Linux
Animation & ListView - Aggiornamenti risultati
« il: 26 Maggio 2011, 12:21:55 CEST »
0
Ciao,
ho il seguente problema.

Ho una View composta da un ImageView e da un Button e una ListView sottostante. Quando il Button è cliccato parte un traslazione verso l'alto di questi due oggetti. Tuttavia gli elemnti della ListView non vengono aggiornati ( in pratica si vedono solo gli elementi visibili prima dell'animation). Come  è possibile risolvere il problema?
Grazie Mille in Anticipo!
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
   
 <ImageView
        android:src="@drawable/sky"
        android:id="@+id/image"
        android:layout_marginTop="0dip"
        android:layout_width="wrap_content"
        android:layout_height="200dip"/>
        <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:orientation="vertical"
                android:id="@+id/sub_layout"
                android:background="@android:color/black">
        <LinearLayout
                android:layout_height="1dip"
                android:layout_width="fill_parent"
                android:background="@android:color/white">
        </LinearLayout>
        <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Espandi">
        </Button>
        <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
        <ListView
                android:id="@android:id/list"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:divider="@android:color/transparent"
                android:cacheColorHint="@android:color/transparent"
                android:background="@android:color/black"
                android:listSelector="@android:color/black"
                android:persistentDrawingCache="all"/>
        </FrameLayout>
        </LinearLayout>
</LinearLayout>

Codice (Java): [Seleziona]
public class SkyGym extends Activity {
            /** Called when the activity is first created. */
                LinearLayout subLayout;
                Button button;
                ListView list;
                ImageView image;
                Animation animationOpen , animationClose;
                ArrayAdapter adapter;
               
                boolean isOpen = false;
               
                String[] listItems = {"1", "2", "3", "4","5", "6", "7", "8","9", "10", "11", "12"};
                private boolean canAnimate;
               
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                //animation = AnimationUtils.loadAnimation(SkyGym.this, R.anim.anim);
               
               
                subLayout = (LinearLayout)findViewById(R.id.sub_layout);
                button = (Button)findViewById(R.id.button1);
                list = (ListView)findViewById(android.R.id.list);
                image = (ImageView)findViewById(R.id.image);
               
               
                LinearInterpolator interpolator = new LinearInterpolator(){
                       
                };
               
               
                adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, listItems);
                list.setAdapter(adapter);
               
               
               
                animationOpen  = new TranslateAnimation(0.0f, 0.0f, 0.0f,-200f);
                animationOpen.setDuration(2000);
                animationOpen.setInterpolator(interpolator);
               
                animationClose  = new TranslateAnimation(0.0f, 0.0f, 0.0f,+200f);
                animationClose.setDuration(2000);
                animationClose.setInterpolator(interpolator);
               
               
               
               
                animationOpen.setAnimationListener(new AnimationListener(){

                                @Override
                                public void onAnimationEnd(Animation arg0) {
                                        // TODO Auto-generated method stub
                                       
                                                image.setVisibility(View.GONE);
                                }

                                @Override
                                public void onAnimationRepeat(Animation animation) {
                                        // TODO Auto-generated method stub
                                        animation.reset();
                                }

                                @Override
                                public void onAnimationStart(Animation animation) {
                                        // TODO Auto-generated method stub
                                        adapter.notifyDataSetChanged();
                                }
                       
                });
               
                 
               animationClose.setAnimationListener(new AnimationListener(){

                        @Override
                        public void onAnimationEnd(Animation arg0) {
                                // TODO Auto-generated method stub
                                image.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onAnimationRepeat(Animation animation) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void onAnimationStart(Animation animation) {
                                // TODO Auto-generated method stub
               
                        }
                   
               });
                LayoutAnimationController controller = new LayoutAnimationController(animationOpen,0.5f);
                //list.setLayoutAnimation(controller);
                button.setOnClickListener(new OnClickListener() {

                                @Override
                                public void onClick(View arg0) {
                                       
                                       
                                       
                                        if(isOpen){
                                                subLayout.startAnimation(animationClose);
                                                isOpen=false;
                                        }
                                        else{  
                                                list.startAnimation(animationOpen);
                                                isOpen=true;
                                        }
                                }
                       
                });
             
               
            }
}




Offline AndroidLab

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • http://it.linkedin.com/in/sandrotroncone
    • Mostra profilo
    • AndroidLab
Re:Animation & ListView - Aggiornamenti risultati
« Risposta #1 il: 23 Giugno 2011, 10:01:34 CEST »
0
Prova a far fare l'inflate con l'Adapter **DOPO** la fine dell'animazione. Aiutati con un thread per questo.
Entra nell'AndroidLab!