-
Notifications
You must be signed in to change notification settings - Fork 2
/
DigitItemAnimator.java
111 lines (95 loc) · 3.89 KB
/
DigitItemAnimator.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package com.qwert2603.vector_integer_view;
import android.content.res.Resources;
import android.support.annotation.IntRange;
import android.support.annotation.NonNull;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.RecyclerView;
import java.util.List;
class DigitItemAnimator extends DefaultItemAnimator {
private final int animationDuration;
private static class VHI extends RecyclerView.ItemAnimator.ItemHolderInfo {
@IntRange(from = 0, to = VectorIntegerView.MAX_DIGIT) final int d;
VHI(@IntRange(from = 0, to = VectorIntegerView.MAX_DIGIT) int d) {
this.d = d;
}
}
DigitItemAnimator(@NonNull Resources resources) {
animationDuration = resources.getInteger(R.integer.viv_animation_duration);
}
@Override
public long getMoveDuration() {
return animationDuration;
}
@Override
public long getAddDuration() {
return animationDuration;
}
@Override
public long getRemoveDuration() {
return animationDuration;
}
@Override
public long getChangeDuration() {
return animationDuration;
}
@Override
public boolean canReuseUpdatedViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull List<Object> payloads) {
return true;
}
@NonNull
@Override
public RecyclerView.ItemAnimator.ItemHolderInfo recordPreLayoutInformation(@NonNull RecyclerView.State state,
@NonNull RecyclerView.ViewHolder viewHolder,
int changeFlags,
@NonNull List<Object> payloads) {
if (changeFlags == FLAG_CHANGED) {
return new VHI(((DigitAdapter.DigitViewHolder) viewHolder).d);
}
return super.recordPreLayoutInformation(state, viewHolder, changeFlags, payloads);
}
@Override
public boolean animateChange(@NonNull RecyclerView.ViewHolder oldHolder,
@NonNull final RecyclerView.ViewHolder newHolder,
@NonNull RecyclerView.ItemAnimator.ItemHolderInfo preInfo,
@NonNull RecyclerView.ItemAnimator.ItemHolderInfo postInfo) {
if (preInfo instanceof VHI) {
final DigitAdapter.DigitViewHolder digitViewHolder = (DigitAdapter.DigitViewHolder) newHolder;
int a = digitViewHolder.d;
digitViewHolder.setDigit(((VHI) preInfo).d);
digitViewHolder.setDigit(a);
newHolder.itemView.postDelayed(new Runnable() {
@Override
public void run() {
dispatchAnimationFinished(newHolder);
}
}, animationDuration);
return false;
}
return super.animateChange(oldHolder, newHolder, preInfo, postInfo);
}
@Override
public boolean animateAdd(final RecyclerView.ViewHolder holder) {
final DigitAdapter.DigitViewHolder digitViewHolder = (DigitAdapter.DigitViewHolder) holder;
int a = digitViewHolder.d;
digitViewHolder.setDigit(VectorIntegerView.DIGIT_NTH);
digitViewHolder.setDigit(a);
holder.itemView.postDelayed(new Runnable() {
@Override
public void run() {
dispatchAddFinished(holder);
}
}, animationDuration);
return false;
}
@Override
public boolean animateRemove(final RecyclerView.ViewHolder holder) {
((DigitAdapter.DigitViewHolder) holder).setDigit(VectorIntegerView.DIGIT_NTH);
holder.itemView.postDelayed(new Runnable() {
@Override
public void run() {
dispatchRemoveFinished(holder);
}
}, animationDuration);
return false;
}
}