ورود

View Full Version : انیمیشن listView



AliRezaBeytari
جمعه 11 اردیبهشت 1394, 11:11 صبح
سلام دوستان.
من میخوام موقعی که ArrayAdapter رو برای یک listView ، میخوام notifyDataSetChanged() کنم ، اون آیتمی که اضافه میشه با یه animation تو listView نمایش داده بشه.
لطفا راهنمایی کنید.
خیلی ممنونم.

Abbas Naghdi
جمعه 11 اردیبهشت 1394, 12:36 عصر
سلام دوستان.
من میخوام موقعی که ArrayAdapter رو برای یک listView ، میخوام notifyDataSetChanged() کنم ، اون آیتمی که اضافه میشه با یه animation تو listView نمایش داده بشه.
لطفا راهنمایی کنید.
خیلی ممنونم.


داخل آداپتر باید انیمیشن رو اظافه کنی .

وقتی لیست ویو پر میشه باید item های custome باشه و در موقع مقدار دهی به عناصر item های listView مثل TextView باید بگی انیمیشن این TextViewمثلا این باشه .

کد انیمیشن هم سرچ کن چیدا میکنی

AliRezaBeytari
جمعه 11 اردیبهشت 1394, 15:19 عصر
من در متود getView کلاسی که از ArrayAdapter مشتق کرده بودم ، قبل از این که view رو return کنم ، اینطوری انیمیشن دادم :


Animation animation = AnimationUtils.loadAnimation(ac, android.R.anim.slide_in_left);
v.startAnimation(animation);


اما اینطوری میشه :

http://8pic.ir/images/hala96v1uq0volhinz2y.gif

یعنی با هر بار add کردن به listView ، کل itemهای listView انیمیشن میخورن !!!
لطفا راهنمایی کنید ، چطور این مشکل رو حل کنم !!

majid_7
جمعه 11 اردیبهشت 1394, 17:28 عصر
من در متود getView کلاسی که از ArrayAdapter مشتق کرده بودم ، قبل از این که view رو return کنم ، اینطوری انیمیشن دادم :


Animation animation = AnimationUtils.loadAnimation(ac, android.R.anim.slide_in_left);
v.startAnimation(animation);


اما اینطوری میشه :

http://8pic.ir/images/hala96v1uq0volhinz2y.gif

یعنی با هر بار add کردن به listView ، کل itemهای listView انیمیشن میخورن !!!
لطفا راهنمایی کنید ، چطور این مشکل رو حل کنم !!

سلام
به نظرم آخرین اندیس لیست تون رو بگیرید و اگر برابر اون بود بهش انیمیشن نده و اگه نبود بهش انیمیشن بده توی آداپتر تون

AliRezaBeytari
جمعه 11 اردیبهشت 1394, 17:51 عصر
میشه نمونه سورس رو بدید !!!

tux-world
شنبه 12 اردیبهشت 1394, 09:06 صبح
سلام. دوستان اجازه ندارن سورس کامل بدن فقط میتونن در حدی که کار دوستان رو راه میندازه کمک کنن. شما برای اینکار میتونید متد getView رو بازنویسی کنید. بشخصه تست نکردم ولی باید جواب بده


public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;

if (v == null) {
LayoutInflater vi = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
v = vi.inflate(R.layout.simple_list_item_1, null);
}

ListData o = list.get(position);
TextView tt = (TextView) v.findViewById(R.id.toptext);

tt.setText(o.content);

Log.d("ListTest", "Position : "+position);
if(flag == false) {
Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_top_to_bottom);
v.startAnimation(animation);}
return v;
}

majid_7
شنبه 12 اردیبهشت 1394, 09:43 صبح
ببین دوست عزیز با این کد میتونی آخرین مقدار لیست رو بگیری

ListView.getCount()-1


بعدش ، مقداری رو که گرفتی بفرست به آداپتر و اونجا چک کن که اگه از این مقدار بزرگتر بود بهش انیمیشن بده واگه نبود بهش انیمیشن نده ،
مثلا

if(position>lastIndex)
{
انیمیشن بده
}
else
{
انیمیشن نده
}



همین :لبخند:
البته امیدوارم جواب بده!!!!

AliRezaBeytari
شنبه 12 اردیبهشت 1394, 11:11 صبح
سلام. دوستان اجازه ندارن سورس کامل بدن فقط میتونن در حدی که کار دوستان رو راه میندازه کمک کنن. شما برای اینکار میتونید متد getView رو بازنویسی کنید. بشخصه تست نکردم ولی باید جواب بده


public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;

if (v == null) {
LayoutInflater vi = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
v = vi.inflate(R.layout.simple_list_item_1, null);
}

ListData o = list.get(position);
TextView tt = (TextView) v.findViewById(R.id.toptext);

tt.setText(o.content);

Log.d("ListTest", "Position : "+position);
if(flag == false) {
Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_top_to_bottom);
v.startAnimation(animation);}
return v;
}

من قبلا این کد رو امتحان کرده بودم ؛ اما کار نمیکنه !!!
باز هم کل ListView رو animation میده !!!

AliRezaBeytari
شنبه 12 اردیبهشت 1394, 11:12 صبح
ببین دوست عزیز با این کد میتونی آخرین مقدار لیست رو بگیری

ListView.getCount()-1


بعدش ، مقداری رو که گرفتی بفرست به آداپتر و اونجا چک کن که اگه از این مقدار بزرگتر بود بهش انیمیشن بده واگه نبود بهش انیمیشن نده ،
مثلا

if(position>lastIndex)
{
انیمیشن بده
}
else
{
انیمیشن نده
}



همین :لبخند:
البته امیدوارم جواب بده!!!!

من متوجه چیزی که گفتید شدم ، اما نمیدونم چطور به اون child از listView انیمیشن بدم !!

majid_7
شنبه 12 اردیبهشت 1394, 14:34 عصر
ببینید ، آخرین ایندکس رو به آداپتر بفرستید!
بعد مقایسه کنید که position شما اگر از آخرین ایندکس بزرگتر هست، بهش انیمیشن بدید ، در غیر اینصورت ساده برش گردونید از آداپتر!
دستور انیمیشن رو هم فقط کافیه همون چیزی که کاربر محترم آقای tux-world (http://barnamenevis.org/member.php?17548-tux-world) گفتند رو انجام بدید،

Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_top_to_bottom); v.startAnimation(animation);



که اینجا الان متغیر v همون View ای هست که میخواید برگردونید که توی متد getView اسمش convertView هست یا هرچیز دیگه !
امیدوارم مشکلتون حل شده باشه.
اینم یه مثال تقریبا کامل(البته بدون Holder)


public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE) ;
convertView = inflater.inflate(R.layout.customshowsubname, null);
}// end if

Animation animation = AnimationUtils.loadAnimation(context,
R.anim.abc_slide_in_bottom);
convertView.startAnimation(animation);

//معرفی عناصر
TextView tvShow = (TextView) convertView
.findViewById(R.id.txtShowCustomSubName);
ImageView imgShow = (ImageView) convertView
.findViewById(R.id.imgShowCustomSubName);
imgShow.setImageResource(R.drawable.customsubname) ;
tvShow.setText(Items[position]);

if(ReadItems.get(position) == 1 )
tvShow.setTextColor(Color.GRAY);
else
tvShow.setTextColor(Color.rgb(255,255,153));

return convertView;
}

هم مثال نحوه ی استفاده از position رو داره،هم آرایه ی ReadItems و نحوه ی کار کرد باهاش و ... (این آرایه رو قبلا گرفتم و به آداپتر ارسال کردمش) و ازش استفاده کردم توی getView ..
امیدوارم مشکلتون حل بشه