This repository has been archived by the owner on Jun 29, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 75
/
AvatarImageBehavior.java
113 lines (86 loc) · 3.68 KB
/
AvatarImageBehavior.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
112
113
package com.alorma.github.ui.utils;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toolbar;
import com.alorma.github.R;
public class AvatarImageBehavior extends CoordinatorLayout.Behavior<ImageView> {
private final static float MIN_AVATAR_PERCENTAGE_SIZE = 0.3f;
private final static int EXTRA_FINAL_AVATAR_PADDING = 80;
private final static String TAG = "behavior";
private final Context mContext;
private float mAvatarMaxSize;
private float mFinalLeftAvatarPadding;
private float mStartPosition;
private int mStartXPosition;
private float mStartToolbarPosition;
private int mStartYPosition;
private int mFinalYPosition;
private int finalHeight;
private int mStartHeight;
private int mFinalXPosition;
public AvatarImageBehavior(Context context, AttributeSet attrs) {
mContext = context;
init();
mFinalLeftAvatarPadding = context.getResources().getDimension(R.dimen.spacing_normal);
}
private void init() {
bindDimensions();
}
private void bindDimensions() {
mAvatarMaxSize = mContext.getResources().getDimension(R.dimen.avatar_size_profile);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, ImageView child, View dependency) {
return dependency instanceof Toolbar;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, ImageView child,
View dependency) {
shouldInitProperties(child, dependency);
final int maxScrollDistance = (int) (mStartToolbarPosition - getStatusBarHeight());
float expandedPercentageFactor = dependency.getY() / maxScrollDistance;
float distanceYToSubtract =
((mStartYPosition - mFinalYPosition) * (1f - expandedPercentageFactor)) + (child.getHeight()
/ 2);
float distanceXToSubtract =
((mStartXPosition - mFinalXPosition) * (1f - expandedPercentageFactor)) + (child.getWidth()
/ 2);
float heightToSubtract = ((mStartHeight - finalHeight) * (1f - expandedPercentageFactor));
child.setY(mStartYPosition - distanceYToSubtract);
child.setX(mStartXPosition - distanceXToSubtract);
int proportionalAvatarSize = (int) (mAvatarMaxSize * (expandedPercentageFactor));
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) child.getLayoutParams();
lp.width = (int) (mStartHeight - heightToSubtract);
lp.height = (int) (mStartHeight - heightToSubtract);
child.setLayoutParams(lp);
return true;
}
private void shouldInitProperties(ImageView child, View dependency) {
if (mStartYPosition == 0) mStartYPosition = (int) (child.getY() + (child.getHeight() / 2));
if (mFinalYPosition == 0) mFinalYPosition = (dependency.getHeight() / 2);
if (mStartHeight == 0) mStartHeight = child.getHeight();
if (finalHeight == 0) {
finalHeight = mContext.getResources().getDimensionPixelOffset(R.dimen.image_final_width);
}
if (mStartXPosition == 0) mStartXPosition = (int) (child.getX() + (child.getWidth() / 2));
if (mFinalXPosition == 0) {
mFinalXPosition = mContext.getResources()
.getDimensionPixelOffset(R.dimen.abc_action_bar_content_inset_material) + (finalHeight
/ 2);
}
if (mStartToolbarPosition == 0) {
mStartToolbarPosition = dependency.getY() + (dependency.getHeight() / 2);
}
}
public int getStatusBarHeight() {
int result = 0;
int resourceId = mContext.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = mContext.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
}