Как сделать анимацию перевода для каждого элемента списка

У меня есть listview с переопределяющим методом getView, чтобы заполнить его. Теперь я хочу, чтобы каждый элемент списка отображался или перемещался с правой стороны экрана в левую сторону, где обычно должен отображаться элемент.

Анимация каждого элемента не должна начинаться в одно и то же время, она должна задерживаться на пару мс перед перемещением других элементов …

Ну, это мой класс адаптера:

public class MyAdapter extends ArrayAdapter<String>{ private Context context; private String[] info; public MyAdapter(Context context, int resource, String[] objects) { super(context, resource, objects); // TODO Auto-generated constructor stub this.context = context; this.info = objects; } protected class RowViewHolder { public TextView text1; public CheckBox cb; public String ss; } @Override public View getView(int pos, View inView, ViewGroup parent) { View vix = inView; RowViewHolder holder; if (vix == null) { LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); vix = inflater.inflate(R.layout.check_list, null); } holder = new RowViewHolder(); holder.text1 = (TextView) vix.findViewById(R.id.info_group); holder.text1.setText(info[pos]); holder.ss = info[pos]; holder.cb = (CheckBox) vix.findViewById(R.id.check); holder.cb.setTag(holder.ss); holder.cb.setOnCheckedChangeListener(CbListen); vix.setTag(holder); return vix; } private OnCheckedChangeListener CbListen = new OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton com, boolean pool) { // TODO Auto-generated method stub String state = (com.getTag()).toString(); if(com.isChecked()){ System.out.println(state+" CHECKED"); }else{ System.out.println(state+" UNCHECKED"); } } }; } 

Есть идеи? 🙂

ОБНОВИТЬ

Ну, конечно! LOL: p

Просто скачайте те ApiDemos, «как то, что сказал Фархан», и вы, ребята, найдете какое-то вроде образца LayoutAnimation2 на представлении пакета.

Там каждый элемент списка анимируется, чтобы заполнить вниз трансляцией-анимацией, в то время как альфа меняется соответственно.

Вот что я делаю для своего дела:

 AnimationSet set = new AnimationSet(true); Animation animation = new AlphaAnimation(0.0f, 1.0f); animation.setDuration(500); set.addAnimation(animation); animation = new TranslateAnimation( Animation.RELATIVE_TO_SELF, 50.0f,Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f ); animation.setDuration(1000); set.addAnimation(animation); LayoutAnimationController controller = new LayoutAnimationController(set, 0.5f); group_list.setLayoutAnimation(controller); 

Я ставлю это ниже моей функции setAdapter (), вы, ребята, можете заставить его выглядеть более уютным с ускорением-замедлением и т. Д. Эффектов.

:п

@ User724861 дал отличный ответ! Как когда-либо я обнаружил, что это запутывает, где поставить код, который он предложил … Я помещаю этот код в свою активность ListFragment следующим образом.

 public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); AnimationSet set = new AnimationSet(true); Animation animation = new AlphaAnimation(0.0f, 1.0f); animation.setDuration(300); set.addAnimation(animation); /*animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 50.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 0.0f); animation.setDuration(10); set.addAnimation(animation); just comment if you don't want :) */ LayoutAnimationController controller = new LayoutAnimationController( set, 0.5f); lv.setLayoutAnimation(controller); adapter = new LazyAdapter(getActivity(), numResults, nodes, tabType); setListAdapter(adapter); } 

Использование LayoutAnimations!

В документах вы можете установить через android: layoutAnimation xml attr

глянь сюда

Анимация каждого элемента не должна начинаться одновременно

Если вы хотите, вы можете сделать что-то вроде этого:

layout_controller.xml:

 <layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android" android:delay="30%" android:animation="@anim/scale" /> 

scale.xml:

 <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <scale android:fromXScale="0.1" android:toXScale="1" android:fromYScale="0.1" android:toYScale="1.0" android:duration="800" android:pivotX="10%" android:pivotY="10%" android:startOffset="100" /> </set> 

А затем в вашей Java после SetListAdapter () вставьте следующий код:

 LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation( this, R.anim.layout_controller); getListView().setLayoutAnimation(controller); 

Обратите внимание, что «android: delay» заставляет анимацию начинать с задержки после предыдущей.

GetView () заполняет каждый элемент вашей активности. Попробуйте создать свою анимацию в getView с помощью Timer .

 package com.Animation1; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.AdapterView; import java.util.ArrayList; public class Animation1Activity extends ListActivity implements AdapterView.OnItemSelectedListener { Animation anim = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); anim = AnimationUtils.loadAnimation( this, R.anim.magnify ); setContentView(R.layout.main); ListView v = getListView(); // set up item selection listener v.setOnItemSelectedListener( this ); // see OnItemSelectedListener methods below ArrayList<String> items = new ArrayList<String>(); items.add( "Red" ); items.add( "Grey" ); items.add( "Cyan" ); items.add( "Blue" ); items.add( "Green" ); items.add( "Yellow" ); items.add( "Black" ); items.add( "White" ); ArrayAdapter itemsAdapter = new ArrayAdapter( this, R.layout.row, items ); setListAdapter( itemsAdapter ); } protected void onListItemClick(ListView l, View v, int position, long id) { v.startAnimation( anim ); } // --- AdapterView.OnItemSelectedListener methods --- public void onItemSelected(AdapterView parent, View v, int position, long id) { v.startAnimation( anim ); } public void onNothingSelected(AdapterView parent) {} } 

Вы также можете настроить анимацию с помощью анимации макета атрибута xml вашего ListView. Вы можете создать анимацию любого типа, используя файл xml в папке res / anim . Это будет полезно, если вы хотите повторно использовать его для любого другого списка, а также хорошо управляете своим кодом.

Пожалуйста, дайте мне знать, если вам нужна помощь в создании анимации в xml.

Просто добавьте родительский макет вида listview

Android: animatelayoutchanges = "истина"

Наслаждайтесь!