blob: 48457c6b24f62f6d493e1ec8220f1cbd3af7cccd (
plain)
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
|
package com.android.systemui.statusbar.phone;
import android.view.View;
/*
Allows mirroring of view states such as alpha, translation...etc
*/
public class ViewLinker<T extends View & ViewLinker.ViewLinkerParent> {
public static final int LINK_ALPHA = 0x1;
public static final int LINK_TRANSLATION = 0x2;
private final LinkInfo[] mLinkedViews;
private final T mParent;
public interface ViewLinkerCallback {
void onAlphaChanged(float alpha);
void onTranslationXChanged(float translationX);
}
public interface ViewLinkerParent {
void registerLinker(ViewLinkerCallback callback);
}
public static class LinkInfo {
private View mView;
private int mFlags;
public LinkInfo(View v, int linkFlags) {
mView = v;
mFlags = linkFlags;
}
private boolean supportsFlag(int flag) {
return (mFlags & flag) != 0;
}
}
private ViewLinkerCallback mCallback = new ViewLinkerCallback() {
@Override
public void onAlphaChanged(float alpha) {
for (LinkInfo v : mLinkedViews) {
if (v.supportsFlag(LINK_ALPHA)) {
v.mView.setAlpha(alpha);
}
}
}
@Override
public void onTranslationXChanged(float translationX) {
for (LinkInfo v : mLinkedViews) {
if (v.supportsFlag(LINK_TRANSLATION)) {
v.mView.setTranslationX(translationX);
}
}
}
};
public ViewLinker(T parent, LinkInfo... viewsToLink) {
mLinkedViews = viewsToLink;
mParent = parent;
ensureParentNotInLink();
parent.registerLinker(mCallback);
}
private void ensureParentNotInLink() {
for (LinkInfo v : mLinkedViews) {
if (v.mView == mParent) {
throw new IllegalStateException("Parent cannot be" +
"one of the linked views");
}
}
}
public View getParent() {
return mParent;
}
}
|