سلام.
در اینگونه ListView ها، لیست item ها به صورت کامل ساخته می شود (نه اینکه یکی یکی به لیست اضافه کنیم)، بعد شیوه آمدن item ها به درون صفحه است که با تاخیر و بر اساس یک Animation خواهد بود (در واقع نمایش آنها است که این حس را القا می کند که یکی یکی افزوده می شوند).
شما باید یک انیمیشن را برای آمدن item ها به درون صفحه تعیین کنید. بنابراین باید کد مربوط به Animation مورد نظر، درون کدهای Adapter نوشته شود (Adapter ای که برای ساخت item ها به کار می رود).
من یک کد را برایتان ذکر می کنم :
ابتدا در شروع Activity ، کد زیر را می نویسیم (تعریف یک متغیر) :
کد پیاچپی:
ArrayList<Boolean> Items_shown_or_not = new ArrayList<Boolean>;();
این متغیر برای این منظور به کار خواهد رفت که تشخیص بدهیم کدام item ها قبلا به درون صفحه آمده اند تا با اسکرول دوباره، انیمیشن برای دومین بار اجرا نشود.
بعد درون Adapter ، کد زیر را می نویسیم :
کد پیاچپی:
int Items_shown_or_not_size = Items_shown_or_not.size();
if(Items_shown_or_not_size < position+1){
Items_shown_or_not.add(true);
}
Animation myAnimation_2 = AnimationUtils.makeInChildBottomAnimation(this.ctx);
if(Items_shown_or_not.get(position) & position>10){ // first row will be animated so we do it after that number
row.setAnimation(myAnimation_2);
Items_shown_or_not.set(position, false);
}
که در آن، row همان View مربوط به ردیف (item) می باشد.
تعیین کرده ایم که انیمیشن برای position های بزرگتر از 10 اجرا شود، زیرا برای item های اول موجود در صفحه، چندان زیبا نخواهد بود (هدف ما جذاب بودن ظاهر ListView است).
کد مورد نظر باید درون روش getView از Adapter نوشته شود. به عنوان مثال :
کد پیاچپی:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(layoutId, parent, false);
}
// show slide up animation for items that comes to screen (start) ------------------------------------
int Items_shown_or_not_size = Items_shown_or_not.size();
if(Items_shown_or_not_size < position+1){
Items_shown_or_not.add(true);
}
Animation myAnimation_2 = AnimationUtils.makeInChildBottomAnimation(this.ctx);
if(Items_shown_or_not.get(position) & position>10){ // first row will be animated so we do it after that number
row.setAnimation(myAnimation_2);
Items_shown_or_not.set(position, false);
}
// show slide up animation for items that comes to screen (end) ------------------------------------
// end
return row;
}
این یک مدل Animation است، اکنون که روند کلی آن را یاد گرفته اید می توانید Animation های دلخواه دیگر را نیز تست کنید.
اگر قبلا با Adapter در ساخت ListView آشنایی ندارید، توصیه می کنم کلید زیر را بخوانید (کد کامل یک Adapter دلخواه و چگونگی به کار بردن آن برای ListView در آن ذکر شده) :
کلید شماره 843