Perilaku aneh ValueAnimator: mengembalikan nilai negatif

Jadi saya mencoba menggunakan ValueAnimator untuk menganimasikan nilai dari 100 menjadi 0 seperti ini

animator = ValueAnimator.ofInt((int) expansion * 100, targetExpansion * 100);
animator.setInterpolator(interpolator);
animator.setDuration(duration);

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        final int animatedValue = (int) valueAnimator.getAnimatedValue();
        Log.w(">>>>>>>", "animatedValue: " + animatedValue);
    }
});

animator.addListener(new ExpansionListener(targetExpansion));

animator.start();

di mana ekspansi dan targetExpansion bisa menjadi 1/0 atau 0/1 dan kode ini menghasilkan keluaran berikut

08-25 11:43:42.776 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:43:42.777 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:43:42.795 23457-23457/myapp W/>>>>>>>: animatedValue: 91
08-25 11:43:42.816 23457-23457/myapp W/>>>>>>>: animatedValue: 81
08-25 11:43:42.835 23457-23457/myapp W/>>>>>>>: animatedValue: 73
08-25 11:43:42.855 23457-23457/myapp W/>>>>>>>: animatedValue: 65
08-25 11:43:42.874 23457-23457/myapp W/>>>>>>>: animatedValue: 58
08-25 11:43:42.894 23457-23457/myapp W/>>>>>>>: animatedValue: 50
08-25 11:43:42.913 23457-23457/myapp W/>>>>>>>: animatedValue: 44
08-25 11:43:42.933 23457-23457/myapp W/>>>>>>>: animatedValue: 38
08-25 11:43:42.952 23457-23457/myapp W/>>>>>>>: animatedValue: 32
08-25 11:43:42.972 23457-23457/myapp W/>>>>>>>: animatedValue: 27
08-25 11:43:42.991 23457-23457/myapp W/>>>>>>>: animatedValue: 22
08-25 11:43:43.011 23457-23457/myapp W/>>>>>>>: animatedValue: 18
08-25 11:43:43.031 23457-23457/myapp W/>>>>>>>: animatedValue: 13
08-25 11:43:43.050 23457-23457/myapp W/>>>>>>>: animatedValue: 10
08-25 11:43:43.070 23457-23457/myapp W/>>>>>>>: animatedValue: 6
08-25 11:43:43.089 23457-23457/myapp W/>>>>>>>: animatedValue: 3
08-25 11:43:43.109 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:43:43.128 23457-23457/myapp W/>>>>>>>: animatedValue: -2
08-25 11:43:43.148 23457-23457/myapp W/>>>>>>>: animatedValue: -4
08-25 11:43:43.167 23457-23457/myapp W/>>>>>>>: animatedValue: -6
08-25 11:43:43.187 23457-23457/myapp W/>>>>>>>: animatedValue: -8
08-25 11:43:43.206 23457-23457/myapp W/>>>>>>>: animatedValue: -9
08-25 11:43:43.226 23457-23457/myapp W/>>>>>>>: animatedValue: -10
08-25 11:43:43.245 23457-23457/myapp W/>>>>>>>: animatedValue: -11
08-25 11:43:43.265 23457-23457/myapp W/>>>>>>>: animatedValue: -12
08-25 11:43:43.285 23457-23457/myapp W/>>>>>>>: animatedValue: -12
08-25 11:43:43.305 23457-23457/myapp W/>>>>>>>: animatedValue: -13
08-25 11:43:43.324 23457-23457/myapp W/>>>>>>>: animatedValue: -13
08-25 11:43:43.344 23457-23457/myapp W/>>>>>>>: animatedValue: -13
08-25 11:43:43.363 23457-23457/myapp W/>>>>>>>: animatedValue: -12
08-25 11:43:43.383 23457-23457/myapp W/>>>>>>>: animatedValue: -12
08-25 11:43:43.402 23457-23457/myapp W/>>>>>>>: animatedValue: -12
08-25 11:43:43.421 23457-23457/myapp W/>>>>>>>: animatedValue: -11
08-25 11:43:43.441 23457-23457/myapp W/>>>>>>>: animatedValue: -11
08-25 11:43:43.460 23457-23457/myapp W/>>>>>>>: animatedValue: -10
08-25 11:43:43.480 23457-23457/myapp W/>>>>>>>: animatedValue: -9
08-25 11:43:43.499 23457-23457/myapp W/>>>>>>>: animatedValue: -8
08-25 11:43:43.519 23457-23457/myapp W/>>>>>>>: animatedValue: -8
08-25 11:43:43.539 23457-23457/myapp W/>>>>>>>: animatedValue: -7
08-25 11:43:43.559 23457-23457/myapp W/>>>>>>>: animatedValue: -6
08-25 11:43:43.578 23457-23457/myapp W/>>>>>>>: animatedValue: -5
08-25 11:43:43.598 23457-23457/myapp W/>>>>>>>: animatedValue: -4
08-25 11:43:43.617 23457-23457/myapp W/>>>>>>>: animatedValue: -3
08-25 11:43:43.637 23457-23457/myapp W/>>>>>>>: animatedValue: -3
08-25 11:43:43.656 23457-23457/myapp W/>>>>>>>: animatedValue: -2
08-25 11:43:43.676 23457-23457/myapp W/>>>>>>>: animatedValue: -1
08-25 11:43:43.695 23457-23457/myapp W/>>>>>>>: animatedValue: -1
08-25 11:43:43.715 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:43:43.735 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:43:43.754 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:43:43.774 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:43:43.793 23457-23457/myapp W/>>>>>>>: animatedValue: 0

Dan pertanyaannya adalah: mengapa ini menghasilkan nilai-nilai negatif aneh yang ditetapkan dari 0 hingga 0 yang, dengan sendirinya, lebih besar secara tidak normal (33 entri) daripada nilai-nilai yang berguna (18 entri)? Selain itu, hal yang sama terjadi ketika saya mencoba beralih dari 0 ke 100:

08-25 11:53:48.377 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:53:48.390 23457-23457/myapp W/>>>>>>>: animatedValue: 0
08-25 11:53:48.409 23457-23457/myapp W/>>>>>>>: animatedValue: 9
08-25 11:53:48.432 23457-23457/myapp W/>>>>>>>: animatedValue: 19
08-25 11:53:48.451 23457-23457/myapp W/>>>>>>>: animatedValue: 27
08-25 11:53:48.472 23457-23457/myapp W/>>>>>>>: animatedValue: 35
08-25 11:53:48.490 23457-23457/myapp W/>>>>>>>: animatedValue: 43
08-25 11:53:48.513 23457-23457/myapp W/>>>>>>>: animatedValue: 50
08-25 11:53:48.529 23457-23457/myapp W/>>>>>>>: animatedValue: 56
08-25 11:53:48.549 23457-23457/myapp W/>>>>>>>: animatedValue: 63
08-25 11:53:48.569 23457-23457/myapp W/>>>>>>>: animatedValue: 68
08-25 11:53:48.588 23457-23457/myapp W/>>>>>>>: animatedValue: 73
08-25 11:53:48.607 23457-23457/myapp W/>>>>>>>: animatedValue: 78
08-25 11:53:48.628 23457-23457/myapp W/>>>>>>>: animatedValue: 83
08-25 11:53:48.646 23457-23457/myapp W/>>>>>>>: animatedValue: 87
08-25 11:53:48.666 23457-23457/myapp W/>>>>>>>: animatedValue: 90
08-25 11:53:48.686 23457-23457/myapp W/>>>>>>>: animatedValue: 94
08-25 11:53:48.705 23457-23457/myapp W/>>>>>>>: animatedValue: 97
08-25 11:53:48.725 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:53:48.744 23457-23457/myapp W/>>>>>>>: animatedValue: 102
08-25 11:53:48.764 23457-23457/myapp W/>>>>>>>: animatedValue: 104
08-25 11:53:48.783 23457-23457/myapp W/>>>>>>>: animatedValue: 106
08-25 11:53:48.803 23457-23457/myapp W/>>>>>>>: animatedValue: 108
08-25 11:53:48.822 23457-23457/myapp W/>>>>>>>: animatedValue: 109
08-25 11:53:48.842 23457-23457/myapp W/>>>>>>>: animatedValue: 110
08-25 11:53:48.862 23457-23457/myapp W/>>>>>>>: animatedValue: 111
08-25 11:53:48.881 23457-23457/myapp W/>>>>>>>: animatedValue: 112
08-25 11:53:48.901 23457-23457/myapp W/>>>>>>>: animatedValue: 112
08-25 11:53:48.920 23457-23457/myapp W/>>>>>>>: animatedValue: 113
08-25 11:53:48.940 23457-23457/myapp W/>>>>>>>: animatedValue: 113
08-25 11:53:48.959 23457-23457/myapp W/>>>>>>>: animatedValue: 113
08-25 11:53:48.979 23457-23457/myapp W/>>>>>>>: animatedValue: 112
08-25 11:53:48.998 23457-23457/myapp W/>>>>>>>: animatedValue: 112
08-25 11:53:49.017 23457-23457/myapp W/>>>>>>>: animatedValue: 112
08-25 11:53:49.037 23457-23457/myapp W/>>>>>>>: animatedValue: 111
08-25 11:53:49.058 23457-23457/myapp W/>>>>>>>: animatedValue: 111
08-25 11:53:49.076 23457-23457/myapp W/>>>>>>>: animatedValue: 110
08-25 11:53:49.096 23457-23457/myapp W/>>>>>>>: animatedValue: 109
08-25 11:53:49.116 23457-23457/myapp W/>>>>>>>: animatedValue: 108
08-25 11:53:49.135 23457-23457/myapp W/>>>>>>>: animatedValue: 108
08-25 11:53:49.154 23457-23457/myapp W/>>>>>>>: animatedValue: 107
08-25 11:53:49.174 23457-23457/myapp W/>>>>>>>: animatedValue: 106
08-25 11:53:49.194 23457-23457/myapp W/>>>>>>>: animatedValue: 105
08-25 11:53:49.213 23457-23457/myapp W/>>>>>>>: animatedValue: 104
08-25 11:53:49.233 23457-23457/myapp W/>>>>>>>: animatedValue: 103
08-25 11:53:49.252 23457-23457/myapp W/>>>>>>>: animatedValue: 103
08-25 11:53:49.272 23457-23457/myapp W/>>>>>>>: animatedValue: 102
08-25 11:53:49.291 23457-23457/myapp W/>>>>>>>: animatedValue: 101
08-25 11:53:49.311 23457-23457/myapp W/>>>>>>>: animatedValue: 101
08-25 11:53:49.330 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:53:49.350 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:53:49.369 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:53:49.389 23457-23457/myapp W/>>>>>>>: animatedValue: 100
08-25 11:53:49.408 23457-23457/myapp W/>>>>>>>: animatedValue: 100

Ini seperti efek pantulan yang tidak saya harapkan dan tidak saya inginkan.


person Stan    schedule 25.08.2017    source sumber
comment
Apakah Anda menggunakan LinearInterpolator dengan animasi Anda?   -  person waleedsarwar86    schedule 25.08.2017
comment
interpolator apa yang kamu gunakan?   -  person Rafal Malek    schedule 25.08.2017
comment
Apakah Anda menggunakan BounceInterpolator ? Jika ya, itulah sebabnya hal ini terjadi.. Sebuah interpolator di mana perubahan memantul di akhir.   -  person Ricardo    schedule 25.08.2017
comment
'interpolator Interpolator pribadi = FastOutSlowInInterpolator();' baru jadi mungkin itu alasannya   -  person Stan    schedule 25.08.2017
comment
Coba gunakan Interpolator standar, dan periksa apakah nilainya masih melampaui batas   -  person Ricardo    schedule 25.08.2017
comment
Mencoba seperti biasa AccelerateDecelerateInterpolator tetapi hasilnya sama   -  person Stan    schedule 25.08.2017


Jawaban (1)


Masalah Anda terletak pada Interpolator yang Anda gunakan. FastOutSlowInInterpolator mungkin melampaui batas selama interpolasi.

Dari dokumen:

getInterpolation() - Pengembalian: float: Nilai interpolasi. Nilai ini bisa lebih dari 1,0 untuk interpolator yang melampaui targetnya, atau kurang dari 0 untuk interpolator yang kurang dari targetnya.

person Ricardo    schedule 25.08.2017
comment
Sebenarnya di samping kode OvershootInterpolator telah ditetapkan dan saya tidak menyebutkannya. - person Stan; 25.08.2017