ست کردن انیمیشن به چند View بصورت خودکار و با فاصله زمانی دلخواه ( حل شد )
سلام دوستان.
من چند رویداید ( انیمیشن ) دارم که میخوام با فاصله ی زمانی مثلا ۳ ثانیه بعد از هم انجام بشن و اون ویو هایی که انیمیشن روشون اجرا میشه بلافاصله visibilityشون visible بشه.
ویدیوی مربوط به Threadها و همچنین اون آموزش های متنی استاد رو خوندم. اما هر کاری میکنم نمیتونم این عملیات رو بنویسم. به عبارتی الگوریتم نویسیم خیلی ضعیفه :( از این قضیه نگرانم با اینکه حدود ۳ ماه هست که شروع کردم ...
اول اومدم با handler این کار رو بکنم چون دیده بودم دوستان با این دستور تاخیر داده بودند و توی دوتا اکتیویتی قبلیم ازش استفاده کردم و جواب هم داد ( چون فقط یک بار نیاز به تاخیر داشتم و همون یک بار از handler استفاده کردم) اما وقتی به این اکتیویتی رسیدم که تقریبا ۱۰ تا تاخیر ۳ ثانیه بین ۱۰ تا عملیات مختلف احتیاج دارم به مشکل خوردم.
از اونجایی که با Threadها آشنایی نداشتم نشستم و ویدیو های استاد رو به دقت نگاه کردم و فهمیدم که میشه از اونها استفاده کرد. ( از چندتا تاپیک دوستان که آدرس داده بودند فهمیدم اولش ... ) خلاصه الان هرکاری میکنم نمیشه :(
اول اومدم چند Thread تعریف کنم و کار ها رو بسپرم بهشون و قبل از استارت شدن بهشون یه sleep بدم به مدت دلخواه. اما با توجه به اینکه ترد ها زمان کار کردنشون مشخص نیست ( البته فکر میکنم به این دلیل) برنامه کرش کرد و گفت خصوص دستوری که توی ترد دوم نوشتم null هستن ( البته نیستن ـ شایدم منظورش ترد بوده نمیدونم ... ) خلاصه بعدش الان رسیدم به جایی که یه متد تعریف کردم به این شکل:
private void threads (Runnable run){
Thread thread = new Thread(run);
thread.start();
try {
thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*if(thread != null) {
thread.interrupt();
}*/
}
حالا اول بگید که درست نوشتم اینو یا نه؟ چون وقتی sleep رو کامنت میکنم اروری نمیده و به سرعت اجرا میشه ( که من میخوام بعد از یه مدتی اجرا کنه ... ) بعدشم توی اکتیویتی Runnable تعریف کردم و کار هامو داخلش گذاشتم و این متد رو صدا زدم با اون مقدار ... البته گفتم که ۱۰ تا کار دارم . و میخواستم ۱۰ تا Runnable تعریف کنم و کار ها رو داخلش بریزم و هر بار این متد و با اون مقدار صدا بزنم ... ولی خب تو همین اولیش کرش میکنه و نتونستم بقیشو بنویسم :|
واضحه که خیلی بد خط و کثیف دارم کار میکنم و الگوریتم افتضاحی به کار گرفتم :( لطفا یکم کمک کنید دوستان :) ( امیدوارم توضیحاتم کامل تفهیم کرده باشه موضوع رو ... )
با تشکر از علی حاج حسینی عزیز که برای پیدا کردن این جواب خیلی کمکم کرد :)
به جای استفاده از Threadها یه متد ساده به شکل زیر نوشتم:
private void anim (final View v , long time , final int xmlAnim){
Animation myanimation = AnimationUtils.loadAnimation(ActivityDeklame.this, xmlAnim);
myanimation.setStartOffset(time);
v.startAnimation(myanimation);
v.setVisibility(View.VISIBLE);
}
بعد داخل هرجایی که بخوام صداش بزنم با مقادیر دلخواه من انیمیشنی رو روی یک View ست میکنه و اجرا میکنه ( توی پروژه ی من اون view ها در حالت عادی Invisible هستن و به همین دلیل داخل متد گفتم که بعد از اجرا شدن انیمیشن ( fide in )روی صفحه بمونن
به این صورت صدا زدمشون:
anim(imageback , 3000 , R.anim.sher1); anim(imageman , 6000 , R.anim.sher1); anim(imagetext , 9000 , R.anim.sher1);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .