-
Notifications
You must be signed in to change notification settings - Fork 0
/
ParallaxView.java
84 lines (69 loc) · 2.61 KB
/
ParallaxView.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
package com.github.magiepooh.mockrecycleritemparallax;
import com.bumptech.glide.Glide;
import com.github.magiepooh.parallaxscrollcallback.ParallaxViewScrollCallbacks;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.support.annotation.DrawableRes;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class ParallaxView extends RelativeLayout implements ParallaxViewScrollCallbacks {
private ImageView mImageView;
private int imageHeight = 0;
private float viewHeightRatio = 1f;
public ParallaxView(Context context) {
super(context);
init(context);
}
public ParallaxView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public ParallaxView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ParallaxView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(context);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec,
View.MeasureSpec.makeMeasureSpec((int) (imageHeight * viewHeightRatio),
View.MeasureSpec.EXACTLY));
mImageView.measure(widthMeasureSpec,
View.MeasureSpec.makeMeasureSpec(imageHeight, View.MeasureSpec.EXACTLY));
}
private void init(final Context context) {
final View view = inflate(context, R.layout.view_parallax, this);
mImageView = (ImageView) view.findViewById(R.id.img_view_parallax);
}
/**
* @param ratio if set 0.85 ViewHeight is 85% of ImageView Height, and can scroll 15% of
* ImageView
*/
public void setViewHeightRatio(float ratio) {
viewHeightRatio = ratio;
}
public void setHeight(int height) {
imageHeight = height;
requestLayout();
}
public void setImage(@DrawableRes int resId) {
Glide.with(getContext())
.load(resId)
.centerCrop()
.into(mImageView);
}
@Override
public void onScroll(float ratio, int scrollY) {
int imageHeight = mImageView.getHeight();
int canScrollSize = imageHeight - getHeight();
float imageOffset = -(ratio * canScrollSize);
mImageView.setTranslationY(imageOffset);
}
}