آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کنترل انیمیشن

Hassan94  10 سال پیش  10 سال پیش
0 0

چطور امکان کنترل کردن انیمیشن وجود دارد؟

یک عکس هست که با زدن دکمه "Play" عکس شروع به چرخیدن می کند. و با زدن دکمه "Puase" انیمیشن به حالت توقف می رود و از دوباره با زدن دکمه "Play" شروع به چرخیدن از همان جای می کند که توقف کرده بود..!

چطور امکان کنترلش هست. با "xml"که من نتونستم کاری بکنم، و هر کاری می کردم انیمیشن ریست می شد. و عکس از نقطه اول شروع به چرخش می کردش..! 

+2 0
سلام ، لینک (10 سال پیش)
0 0
تو متد میگه که انیمیشن Stop میشه من حالت puase رو میخوام به نظرت حالتی که رو میخوام انجام میده (10 سال پیش)
0 0
دوست عزیز توضیحات داخل اون لینکی که بهتون دادم رو بخونید ، توضیح داده که currentPlayTime ذخیره میشه که زمان آخرین نقطه حرکت انیمیشن هست و زمانی که مجددا انیمیشن رو اجرا میکنیم از نقطه ذخیره شده ادامه پیدا میکنه ، حالا اسم متد ما فرق نمیکنه دیگه !! (10 سال پیش)
0 0
ممنون من این کار رو کردم ولی به این ارور میده getCurrentPlayTime() img_1 = (ImageView) findViewById(R.id.img_1); btn_1 = (Button) findViewById(R.id.btn_1); anim_1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.m); anim_1.setFillEnabled(true); anim_1.setFillAfter(true); img_1.setAnimation(anim_1); anim_1.startNow(); img_1.invalidate(); getCurrentPlayTime(); btn_1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { stopAnimation(); } }); } private void stopAnimation(){ CurrentPlayTime = anim_1.getCurrentPlayTime(); anim_1.cancel(); } private void startAnimation() { anim_1.start(); anim_1.setCurrentPlayTime(CurrentPlayTime); } } (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Hassan94  10 سال پیش
0 0

 img_1  = (ImageView) findViewById(R.id.img_1);
btn_1 = (Button) findViewById(R.id.btn_1);
anim_1 = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.m);


anim_1.setFillEnabled(true);
anim_1.setFillAfter(true);
img_1.setAnimation(anim_1);
anim_1.startNow();
img_1.invalidate();

getCurrentPlayTime();

btn_1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
stopAnimation();
}
});

}

private void stopAnimation(){
CurrentPlayTime = anim_1.getCurrentPlayTime();
anim_1.cancel();
}

private void startAnimation() {
anim_1.start();
anim_1.setCurrentPlayTime(CurrentPlayTime);
}


}
0 0
ممنون من این کار رو کردم ولی به این ارور میده getCurrentPlayTime() (10 سال پیش)
0 0
شما متغیر هاتون رو اصلا ذخیره نکردید جایی !!! توصیه میکنم اون لینکی که بهتون دادم و لینک رو به دقت بخونید ! (10 سال پیش)
0 0
متغییرها مگه تو این ذخیره نمیشن CurrentPlayTime من این رو از نوع long تعریفش کردم، بالا نوشتم که اون قسمت رو کپی نکردم! (10 سال پیش)
+1 0
منظورم قسمت getCurrentPlayTime بود , تا شب سعی میکنم یک نمونه بنویسم و همین جا قرار بدم ! (10 سال پیش)
0 0
ممنون منتظر میمونم تا آموزش خوبی بهم بدید. (10 سال پیش)
پاسخ به سوال 
صادقی راد  10 سال پیش
+2 0

سلام مجدد !

گفتم سعی میکنم تا شب بنویسمش , یکم از شب گذشت ولی .... :D

اول بذارید یه توضیح بدم بهتون , یه جورایی توضیحات همون صفحاتی که بهتون گفتم  رو براتون کامل باز میکنم .

اول اینکه حالت عادی با استفاده از Set نمیشه این کار که مد نظر شماست رو پیاده کرد و باید از ValueAnimator یا ObjectAnimator استفاده کنیم .

به صورت کلی ما نیاز به یک Animator داریم تا یک Animation ! در واقع ValueAnimator و ObjectAnimator ویژگی های یک Set معمولی رو دارن و یک سری ( بسیاری ! ) توابع دیگه برای مدیریت اون وجود داره , لازم به ذکر هم هست که برای این کار حداقل به API 11 نیاز داریم !

من دقیقا کد کلاس خودم رو کاملا قرار میدم , کد کاملا واضحه , باز هم اگر جایی ابهامی وجود داشت بفرمایید .

package com.sadeghirad.animpause;

public class ActivityMain extends AppCompatActivity {

private long mCurrentPlayTime;
private ObjectAnimator rotate;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnStart = (Button) findViewById(R.id.btnStart);
Button btnStop = (Button) findViewById(R.id.btnStop);
ImageView img = (ImageView) findViewById(R.id.img);
rotate = ObjectAnimator.ofFloat(img, "rotation", 0f, 360f);
rotate.setDuration(5000);
rotate.setRepeatCount(ObjectAnimator.INFINITE);
rotate.start();

btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rotate.start();
rotate.setCurrentPlayTime(mCurrentPlayTime);
}
});

btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mCurrentPlayTime = rotate.getCurrentPlayTime();
rotate.cancel();
}
});

}
}

موفق باشید./

0 0
ممنون کد کار کرد ولی یه مشکلی بود که وقتی دکمه Stop رو 2بار میزدی وبعدش Play میزدی قاطی میکردش امتحانش کن چندبار stop رو بزن وبعدش چند بار هم play قاطی پاطی میشه! (10 سال پیش)
0 0
خواهش میکنم ، ولی به عنوان یک برادر کوچیک تر بذارین یه صحبتی کنم ، سعی کنین با کد در بیوفتین ، بالا پایینش کنین ، ببینین چی میگه کد بهتون ، تلاش تو مقوله برنامه نویسی خیلی مهمه ، زمانی که من با این مشکل شما مواجه شده بودم برای حلش کلی وقت گذاشتم ، اگر همین الان هم شما داخل اینترنت سرچ کنین میبینین که هنوز که هنوزه یک آموزش سر راست نیست و کلی باید به خاطرش گشت به خصوص زمانی که اصلا شما ندونی به چی نیاز داری واسه حل مشکلت ، دقیقا وضعیتی که من اون موقع داشتم همین بود ! هیچ وقت تسلیم نشین ، یک جمله هست از زبون ادیسون نقل شده که میگه : "طعم بسیاری از شكست های زندگی را كسانی چشیده اند كه در دو قدمی كامیابی از تلاش خود دست كشیده اند." ، خلاصه اینکه همیشه سعی کنین روی مشکلتون تمرکز کنین و یه راه حلی براش پیدا کنین بدون اینکه نیاز به کسی داشته باشین ! خب ، در مورد جواب مشکلتون ، میتونین داخل هر کدوم از دکمه ها زمانی که کلیک میشن غیر فعال شن تا دوباره کاربر قادر به انتخابش نباشه ! موفق باشید./ (10 سال پیش)
0 0
ممنون از راهنماییت من کلی تو نت و تو اینجا سرچ میکنم اگه چیزی نتونستم پیدا کنم سوال رو مطرح میکنم، در مورد مشکل بالا همه میشه از یکه دکمه استفاده کرد و با مقدار boolean بررسیش کرد و تا بشه یبار به عنوان Play عمل کنه و بار دیگه هم به عنوان Puase عمل کنه. (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .