├── settings.gradle
├── assets
├── screen1.png
└── screen2.png
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── paralloidexample
├── src
│ └── main
│ │ ├── ic_launcher-web.png
│ │ ├── res
│ │ ├── drawable-hdpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-mdpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-nodpi
│ │ │ ├── example_sky.jpg
│ │ │ ├── example_image.jpg
│ │ │ └── example_rainbow.jpg
│ │ ├── drawable-xhdpi
│ │ │ └── ic_launcher.png
│ │ ├── drawable-xxhdpi
│ │ │ └── ic_launcher.png
│ │ ├── values-sw600dp
│ │ │ └── dimens.xml
│ │ ├── menu
│ │ │ └── home.xml
│ │ ├── values-sw720dp-land
│ │ │ └── dimens.xml
│ │ ├── layout
│ │ │ ├── fragment_parallax_list_background.xml
│ │ │ ├── activity_home.xml
│ │ │ ├── fragment_parallax_background.xml
│ │ │ ├── fragment_home_dummy.xml
│ │ │ ├── fragment_invert_transformer.xml
│ │ │ └── fragment_combi_transformer.xml
│ │ ├── drawable
│ │ │ ├── bg_gradient.xml
│ │ │ ├── bg_gradient_invert.xml
│ │ │ └── bg_gradient_with_middle.xml
│ │ ├── values
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ ├── values-v11
│ │ │ └── styles.xml
│ │ └── values-v14
│ │ │ └── styles.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── uk
│ │ └── co
│ │ └── chrisjenx
│ │ └── paralloidexample
│ │ ├── ParallaxBackgroundFragment.java
│ │ ├── ShiftBackgroundFragment.java
│ │ ├── ParallaxViewRightFragment.java
│ │ ├── ParallaxViewUpFragment.java
│ │ ├── ParallaxViewDownFragment.java
│ │ ├── ParallaxViewCombiFragment.java
│ │ ├── ParallaxBackgroundListFragment.java
│ │ ├── OverParallaxBackgroundListFragment.java
│ │ └── HomeActivity.java
├── keystore
│ └── paralloidkeystore.jks
└── build.gradle
├── CHANGELOG.md
├── paralloidviews
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── uk
│ │ └── co
│ │ └── chrisjenx
│ │ └── paralloid
│ │ └── views
│ │ ├── ParallaxListView.java
│ │ ├── ParallaxScrollView.java
│ │ └── ParallaxHorizontalScrollView.java
└── build.gradle
├── paralloid
├── src
│ └── main
│ │ ├── java
│ │ └── uk
│ │ │ └── co
│ │ │ └── chrisjenx
│ │ │ └── paralloid
│ │ │ ├── measure
│ │ │ ├── ScrollSize.java
│ │ │ ├── ViewScrollSize.java
│ │ │ └── AbsListScrollSize.java
│ │ │ ├── OnScrollChangedListener.java
│ │ │ ├── transform
│ │ │ ├── Transformer.java
│ │ │ ├── InvertTransformer.java
│ │ │ ├── LinearTransformer.java
│ │ │ ├── LeftAngleTransformer.java
│ │ │ └── RightAngleTransformer.java
│ │ │ ├── ParallaxorListener.java
│ │ │ ├── ParallaxViewInfo.java
│ │ │ ├── ParallaxViewController.java
│ │ │ ├── Parallaxor.java
│ │ │ ├── graphics
│ │ │ └── ParallaxDrawable.java
│ │ │ ├── utils
│ │ │ └── ParallaxHelper.java
│ │ │ └── ParallaxController.java
│ │ └── AndroidManifest.xml
└── build.gradle
├── .gitignore
├── gradlew.bat
├── README.md
├── gradlew
└── LICENSE
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':paralloid', ':paralloidexample', ':paralloidviews'
--------------------------------------------------------------------------------
/assets/screen1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/assets/screen1.png
--------------------------------------------------------------------------------
/assets/screen2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/assets/screen2.png
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/paralloidexample/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/paralloidexample/keystore/paralloidkeystore.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/keystore/paralloidkeystore.jks
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-nodpi/example_sky.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-nodpi/example_sky.jpg
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-nodpi/example_image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-nodpi/example_image.jpg
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable-nodpi/example_rainbow.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chrisjenx/Paralloid/HEAD/paralloidexample/src/main/res/drawable-nodpi/example_rainbow.jpg
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | ## 0.3.0
4 | - Added Concept of Transformers
5 |
6 | ## 0.2.0
7 | - API Change
8 | - Added the ability to scroll multiple backgrounds.
9 |
10 | ## 0.1.0
11 | Initial Release
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values-sw600dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/paralloidviews/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Oct 20 22:09:45 BST 2013
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=http\://services.gradle.org/distributions/gradle-1.8-all.zip
7 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/menu/home.xml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/measure/ScrollSize.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.measure;
2 |
3 | /**
4 | * Created by chris on 23/10/2013
5 | * Project: Paralloid
6 | */
7 | public interface ScrollSize {
8 |
9 | int getMaxScrollX();
10 |
11 | int getMaxScrollY();
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values-sw720dp-land/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 128dp
5 |
6 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/layout/fragment_parallax_list_background.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/OnScrollChangedListener.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid;
2 |
3 | /**
4 | * OnScrolled changed Listener for {@link android.view.View} and this alike to implement
5 | */
6 | public interface OnScrollChangedListener {
7 | void onScrollChanged(Object who, int l, int t, int oldl, int oldt);
8 | }
--------------------------------------------------------------------------------
/paralloid/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable/bg_gradient.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable/bg_gradient_invert.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 | 172dp
7 | 16dp
8 |
9 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/transform/Transformer.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.transform;
2 |
3 | /**
4 | * Created by chris on 23/10/2013
5 | * Project: Paralloid
6 | */
7 | public interface Transformer {
8 |
9 | /**
10 | * @return can not be null, otherwise scroll will fail
11 | */
12 | int[] scroll(float x, float y, float factor);
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # built application files
2 | *.apk
3 | *.ap_
4 |
5 | # files for the dex VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # generated files
12 | bin/
13 | gen/
14 |
15 | # Local configuration file (sdk path, etc)
16 | local.properties
17 |
18 | # Eclipse project files
19 | .classpath
20 | .project
21 |
22 | # Gradle + Project files
23 | .idea/
24 | build/
25 | .gradle/
26 | *.iml
27 | .DS_Store
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/transform/InvertTransformer.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.transform;
2 |
3 | /**
4 | * Created by chris on 23/10/2013
5 | * Project: Paralloid
6 | */
7 | public class InvertTransformer implements Transformer {
8 | @Override
9 | public int[] scroll(float x, float y, float factor) {
10 | return new int[]{(int) -(x * factor), (int) -(y * factor)};
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/transform/LinearTransformer.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.transform;
2 |
3 | /**
4 | * Created by chris on 23/10/2013
5 | * Project: Paralloid
6 | */
7 | public class LinearTransformer implements Transformer {
8 |
9 | @Override
10 | public int[] scroll(float x, float y, float factor) {
11 | return new int[]{(int) (x * factor), (int) (y * factor)};
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/drawable/bg_gradient_with_middle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
10 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/transform/LeftAngleTransformer.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.transform;
2 |
3 | /**
4 | * Put simply turns up into left, left into down, down into right, right into up.
5 | *
6 | * Created by chris on 23/10/2013
7 | * Project: Paralloid
8 | */
9 | public class LeftAngleTransformer implements Transformer {
10 |
11 | @Override
12 | public int[] scroll(float x, float y, float factor) {
13 | return new int[]{(int) (y * factor), (int) (x * factor)};
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/transform/RightAngleTransformer.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.transform;
2 |
3 | /**
4 | * Put simply turns up into right, right into down, down into left, left into up.
5 | *
6 | * Created by chris on 23/10/2013
7 | * Project: Paralloid
8 | */
9 | public class RightAngleTransformer implements Transformer {
10 |
11 | @Override
12 | public int[] scroll(float x, float y, float factor) {
13 | return new int[]{(int) -(y * factor), (int) -(x * factor)};
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/ParallaxorListener.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid;
2 |
3 | /**
4 | * Created by chris on 20/10/2013
5 | * Project: Paralloid
6 | */
7 | public interface ParallaxorListener extends Parallaxor, OnScrollChangedListener {
8 |
9 | /**
10 | * Add a scroll listener you can listen too if you want to do something custom your end as well.
11 | *
12 | * @param onScrollChangedListener Null is valid (it will remove it if set).
13 | */
14 | public void setOnScrollListener(OnScrollChangedListener onScrollChangedListener);
15 | }
16 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/measure/ViewScrollSize.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.measure;
2 |
3 | import android.view.View;
4 |
5 | /**
6 | * Created by chris on 23/10/2013
7 | * Project: Paralloid
8 | */
9 |
10 | public class ViewScrollSize implements ScrollSize {
11 |
12 | final T viewToSize;
13 |
14 | public ViewScrollSize(T viewToSize) {
15 | this.viewToSize = viewToSize;
16 | }
17 |
18 | /**
19 | * Default impl returns the View width
20 | */
21 | @Override
22 | public int getMaxScrollX() {
23 | return viewToSize.getWidth();
24 | }
25 |
26 | /**
27 | * Default impl returns the View height
28 | */
29 | @Override
30 | public int getMaxScrollY() {
31 | return viewToSize.getHeight();
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/ParallaxViewInfo.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid;
2 |
3 | import uk.co.chrisjenx.paralloid.transform.LinearTransformer;
4 | import uk.co.chrisjenx.paralloid.transform.Transformer;
5 |
6 | class ParallaxViewInfo {
7 |
8 | final float factor;
9 | final Transformer interpolator;
10 |
11 | private int maxX;
12 | private int maxY;
13 |
14 | ParallaxViewInfo(float factor, Transformer transformer) {
15 | this.factor = factor;
16 | this.interpolator = transformer == null ? new LinearTransformer() : transformer;
17 | }
18 |
19 | public int getMaxX() {
20 | return maxX;
21 | }
22 |
23 | public void setMaxX(int maxX) {
24 | this.maxX = maxX;
25 | }
26 |
27 | public int getMaxY() {
28 | return maxY;
29 | }
30 |
31 | public void setMaxY(int maxY) {
32 | this.maxY = maxY;
33 | }
34 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/layout/activity_home.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
12 |
13 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/paralloidexample/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | mavenCentral()
4 | }
5 | dependencies {
6 | classpath 'com.android.tools.build:gradle:0.6.+'
7 | }
8 | }
9 | apply plugin: 'android'
10 |
11 | repositories {
12 | mavenCentral()
13 | }
14 |
15 | android {
16 | compileSdkVersion 18
17 | buildToolsVersion "18.1.1"
18 |
19 | defaultConfig {
20 | minSdkVersion 14
21 | targetSdkVersion 18
22 | }
23 |
24 | signingConfigs {
25 | release {
26 | // We can leave these in environment variables
27 | storeFile file("keystore/paralloidkeystore.jks")
28 | keyAlias "paralloid"
29 |
30 | storePassword 'paralloid'
31 | keyPassword 'paralloid'
32 | }
33 | }
34 |
35 | buildTypes {
36 | release {
37 | signingConfig signingConfigs.release
38 | }
39 | }
40 | }
41 |
42 | dependencies {
43 | compile 'com.android.support:appcompat-v7:18.0.+'
44 | compile project(':paralloidviews')
45 | }
46 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Paralloid Example
5 | Settings
6 | Parallax View
7 | Shift Background
8 | Parallax Background
9 | Parallax List Background
10 | OverParallax Background
11 | Invert Transformer
12 | RightAngle Transformer
13 | Transformer Combination
14 | Peek a boo!
15 |
16 | Bacon ipsum dolor sit amet ut t-bone ham hock pariatur. Ex aliquip est dolore strip steak enim. Fugiat reprehenderit tenderloin ham hock. Pork minim chicken, jowl do strip steak short loin meatball bacon doner proident nulla eiusmod. Elit veniam beef sunt.
17 |
18 |
19 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ParallaxBackgroundFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 |
9 | import uk.co.chrisjenx.paralloid.views.ParallaxScrollView;
10 |
11 | /**
12 | * A dummy fragment representing a section of the app, but that simply
13 | * displays dummy text.
14 | */
15 | public class ParallaxBackgroundFragment extends Fragment {
16 |
17 | public ParallaxBackgroundFragment() {
18 | }
19 |
20 | @Override
21 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
22 | Bundle savedInstanceState) {
23 | View rootView = inflater.inflate(R.layout.fragment_parallax_background, container, false);
24 | ParallaxScrollView scrollView = (ParallaxScrollView) rootView.findViewById(R.id.scroll_view);
25 | scrollView.parallaxViewBackgroundBy(scrollView, getResources().getDrawable(R.drawable.example_image), .2f);
26 |
27 | return rootView;
28 | }
29 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ShiftBackgroundFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ScrollView;
9 |
10 | import uk.co.chrisjenx.paralloid.Parallaxor;
11 |
12 | /**
13 | * A dummy fragment representing a section of the app, but that simply
14 | * displays dummy text.
15 | */
16 | public class ShiftBackgroundFragment extends Fragment {
17 |
18 | public ShiftBackgroundFragment() {
19 | }
20 |
21 | @Override
22 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
23 | Bundle savedInstanceState) {
24 | View rootView = inflater.inflate(R.layout.fragment_parallax_background, container, false);
25 | ScrollView scrollView = (ScrollView) rootView.findViewById(R.id.scroll_view);
26 | if (scrollView instanceof Parallaxor) {
27 | ((Parallaxor) scrollView).parallaxViewBackgroundBy(scrollView, getResources().getDrawable(R.drawable.example_rainbow), 1f);
28 | }
29 |
30 | return rootView;
31 | }
32 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ParallaxViewRightFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 | import android.widget.ScrollView;
10 |
11 | import uk.co.chrisjenx.paralloid.Parallaxor;
12 | import uk.co.chrisjenx.paralloid.transform.RightAngleTransformer;
13 |
14 | /**
15 | * A dummy fragment representing a section of the app, but that simply
16 | * displays dummy text.
17 | */
18 | public class ParallaxViewRightFragment extends Fragment {
19 |
20 | public ParallaxViewRightFragment() {
21 | }
22 |
23 | @Override
24 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
25 | Bundle savedInstanceState) {
26 | View rootView = inflater.inflate(R.layout.fragment_invert_transformer, container, false);
27 | ImageView imageView = (ImageView) rootView.findViewById(R.id.image_view);
28 | ScrollView scrollView = (ScrollView) rootView.findViewById(R.id.scroll_view);
29 | if (scrollView instanceof Parallaxor) {
30 | ((Parallaxor) scrollView).parallaxViewBy(imageView, new RightAngleTransformer(), 0.4f);
31 | }
32 |
33 | return rootView;
34 | }
35 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ParallaxViewUpFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 | import android.widget.ScrollView;
10 |
11 | import uk.co.chrisjenx.paralloid.Parallaxor;
12 |
13 | /**
14 | * A dummy fragment representing a section of the app, but that simply
15 | * displays dummy text.
16 | */
17 | public class ParallaxViewUpFragment extends Fragment {
18 | /**
19 | * The fragment argument representing the section number for this
20 | * fragment.
21 | */
22 | public static final String ARG_SECTION_NUMBER = "section_number";
23 |
24 | public ParallaxViewUpFragment() {
25 | }
26 |
27 | @Override
28 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
29 | Bundle savedInstanceState) {
30 | View rootView = inflater.inflate(R.layout.fragment_home_dummy, container, false);
31 | ImageView imageView = (ImageView) rootView.findViewById(R.id.image_view);
32 | ScrollView scrollView = (ScrollView) rootView.findViewById(R.id.scroll_view);
33 | if (scrollView instanceof Parallaxor) {
34 | ((Parallaxor) scrollView).parallaxViewBy(imageView, 0.5f);
35 | }
36 |
37 | return rootView;
38 | }
39 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ParallaxViewDownFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 | import android.widget.ScrollView;
10 |
11 | import uk.co.chrisjenx.paralloid.Parallaxor;
12 | import uk.co.chrisjenx.paralloid.transform.InvertTransformer;
13 |
14 | /**
15 | * A dummy fragment representing a section of the app, but that simply
16 | * displays dummy text.
17 | */
18 | public class ParallaxViewDownFragment extends Fragment {
19 | /**
20 | * The fragment argument representing the section number for this
21 | * fragment.
22 | */
23 | public static final String ARG_SECTION_NUMBER = "section_number";
24 |
25 | public ParallaxViewDownFragment() {
26 | }
27 |
28 | @Override
29 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
30 | Bundle savedInstanceState) {
31 | View rootView = inflater.inflate(R.layout.fragment_invert_transformer, container, false);
32 | ImageView imageView = (ImageView) rootView.findViewById(R.id.image_view);
33 | ScrollView scrollView = (ScrollView) rootView.findViewById(R.id.scroll_view);
34 | if (scrollView instanceof Parallaxor) {
35 | ((Parallaxor) scrollView).parallaxViewBy(imageView, new InvertTransformer(), 0.35f);
36 | }
37 |
38 | return rootView;
39 | }
40 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ParallaxViewCombiFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ImageView;
9 | import android.widget.ScrollView;
10 |
11 | import uk.co.chrisjenx.paralloid.Parallaxor;
12 | import uk.co.chrisjenx.paralloid.transform.LeftAngleTransformer;
13 | import uk.co.chrisjenx.paralloid.transform.RightAngleTransformer;
14 |
15 | /**
16 | * A dummy fragment representing a section of the app, but that simply
17 | * displays dummy text.
18 | */
19 | public class ParallaxViewCombiFragment extends Fragment {
20 |
21 | public ParallaxViewCombiFragment() {
22 | }
23 |
24 | @Override
25 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
26 | Bundle savedInstanceState) {
27 | View rootView = inflater.inflate(R.layout.fragment_combi_transformer, container, false);
28 | ImageView imageView = (ImageView) rootView.findViewById(R.id.image_view);
29 | ImageView imageView2 = (ImageView) rootView.findViewById(R.id.image_view2);
30 | ScrollView scrollView = (ScrollView) rootView.findViewById(R.id.scroll_view);
31 | if (scrollView instanceof Parallaxor) {
32 | ((Parallaxor) scrollView).parallaxViewBy(imageView, new LeftAngleTransformer(), 0.2f);
33 | ((Parallaxor) scrollView).parallaxViewBy(imageView2, new RightAngleTransformer(), 0.2f);
34 | }
35 |
36 | return rootView;
37 | }
38 | }
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/layout/fragment_parallax_background.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
12 |
13 |
16 |
17 |
20 |
21 |
24 |
25 |
28 |
29 |
32 |
33 |
36 |
37 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/paralloidviews/src/main/java/uk/co/chrisjenx/paralloid/views/ParallaxListView.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.views;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.Drawable;
5 | import android.util.AttributeSet;
6 | import android.view.View;
7 | import android.widget.ListView;
8 |
9 | import uk.co.chrisjenx.paralloid.ParallaxViewController;
10 | import uk.co.chrisjenx.paralloid.Parallaxor;
11 | import uk.co.chrisjenx.paralloid.transform.Transformer;
12 |
13 | /**
14 | * Created by chris on 02/10/2013
15 | * Project: Paralloid
16 | */
17 | public class ParallaxListView extends ListView implements Parallaxor {
18 |
19 | ParallaxViewController mParallaxViewController;
20 |
21 | public ParallaxListView(Context context) {
22 | super(context);
23 | init();
24 | }
25 |
26 | public ParallaxListView(Context context, AttributeSet attrs) {
27 | super(context, attrs);
28 | init();
29 | }
30 |
31 | public ParallaxListView(Context context, AttributeSet attrs, int defStyle) {
32 | super(context, attrs, defStyle);
33 | init();
34 | }
35 |
36 | private void init() {
37 | mParallaxViewController = ParallaxViewController.wrap(this);
38 | }
39 |
40 | @Override
41 | public void parallaxViewBy(View view, float multiplier) {
42 | mParallaxViewController.parallaxViewBy(view, multiplier);
43 | }
44 |
45 | @Override
46 | public void parallaxViewBy(View view, Transformer transformer, float multiplier) {
47 | mParallaxViewController.parallaxViewBy(view, transformer, multiplier);
48 | }
49 |
50 | @Override
51 | public void parallaxViewBackgroundBy(View view, Drawable drawable, float multiplier) {
52 | mParallaxViewController.parallaxViewBackgroundBy(view, drawable, multiplier);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/ParallaxViewController.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid;
2 |
3 | import android.view.View;
4 | import android.widget.AbsListView;
5 |
6 | import uk.co.chrisjenx.paralloid.measure.AbsListScrollSize;
7 |
8 | /**
9 | * Created by chris on 02/10/2013
10 | * Project: Paralloid
11 | */
12 | public class ParallaxViewController extends ParallaxController implements AbsListView.OnScrollListener {
13 |
14 | public static ParallaxViewController wrap(T wrappedView) {
15 | return new ParallaxViewController(wrappedView);
16 | }
17 |
18 | protected ParallaxViewController(T wrappedView) {
19 | super(wrappedView);
20 | init();
21 | }
22 |
23 | /**
24 | * Init this controller
25 | */
26 | private void init() {
27 | if (mWrapped == null)
28 | throw new IllegalArgumentException("The wrapped view cannot be null");
29 |
30 | if (mWrapped instanceof AbsListView) {
31 | ((AbsListView) mWrapped).setOnScrollListener(this);
32 | }
33 | }
34 |
35 | @Override
36 | public void onScrollStateChanged(AbsListView view, int scrollState) {
37 | }
38 |
39 | /**
40 | * Used internally by the AbsListView implementation, calling through to this is unnecessary, the controller
41 | * will happily set the OnScrollListener
42 | */
43 | @Override
44 | public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
45 | final int offsetY = AbsListScrollSize.calculateOffset(view);
46 | mIgnoreOnScrollListener = false;
47 | onScrollChanged(getWrapped(), mWrapped.getScrollX(), offsetY, mLastScrollX, mLastScrollY);
48 | mIgnoreOnScrollListener = true;
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/paralloid/src/main/java/uk/co/chrisjenx/paralloid/Parallaxor.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid;
2 |
3 | import android.graphics.drawable.Drawable;
4 | import android.view.View;
5 |
6 | import uk.co.chrisjenx.paralloid.transform.Transformer;
7 |
8 | /**
9 | * Suggests that this view will let you parallax others.
10 | */
11 | public interface Parallaxor {
12 | /**
13 | * Which view we want to move by.
14 | *
15 | * The view that implements this should call too {@link ParallaxViewController#parallaxViewBy(android.view.View, float)}
16 | *
17 | * @param view View to move when this moves
18 | * @param multiplier 1.0f is the normal amount, a 1:1 ratio, 0.5f would move at half the distance of this view etc..
19 | */
20 | public void parallaxViewBy(View view, float multiplier);
21 |
22 | /**
23 | * Which view we want to move by.
24 | *
25 | * The view that implements this should call too {@link ParallaxViewController#parallaxViewBy(android.view.View, float)}
26 | *
27 | * @param view View to move when this moves
28 | * @param transformer how do we want to move the view? (null default to {@link uk.co.chrisjenx.paralloid.transform.LinearTransformer})
29 | * @param multiplier 1.0f is the normal amount, a 1:1 ratio, 0.5f would move at half the distance of this view etc..
30 | */
31 | public void parallaxViewBy(View view, Transformer transformer, float multiplier);
32 |
33 | /**
34 | * This does a bit more than move the background, it will make it fit the view in a way that
35 | * it will reach out side its bounds to take into account
36 | *
37 | * @param drawable Drawable to Parallax
38 | * @param multiplier How much to move it by, 1 would be a 1:1 relationship. 0.5 would move the
39 | * background and half the rate of the scrolling.
40 | */
41 | public void parallaxViewBackgroundBy(View view, Drawable drawable, float multiplier);
42 | }
--------------------------------------------------------------------------------
/paralloidviews/src/main/java/uk/co/chrisjenx/paralloid/views/ParallaxScrollView.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.views;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.Drawable;
5 | import android.util.AttributeSet;
6 | import android.view.View;
7 | import android.widget.ScrollView;
8 |
9 | import uk.co.chrisjenx.paralloid.ParallaxViewController;
10 | import uk.co.chrisjenx.paralloid.Parallaxor;
11 | import uk.co.chrisjenx.paralloid.transform.Transformer;
12 |
13 | /**
14 | * Created by chris on 02/10/2013
15 | * Project: Paralloid
16 | */
17 | public class ParallaxScrollView extends ScrollView implements Parallaxor {
18 |
19 | ParallaxViewController mParallaxViewController;
20 |
21 | public ParallaxScrollView(Context context) {
22 | super(context);
23 | init();
24 | }
25 |
26 | public ParallaxScrollView(Context context, AttributeSet attrs) {
27 | super(context, attrs);
28 | init();
29 | }
30 |
31 | public ParallaxScrollView(Context context, AttributeSet attrs, int defStyle) {
32 | super(context, attrs, defStyle);
33 | init();
34 | }
35 |
36 | private void init() {
37 | mParallaxViewController = ParallaxViewController.wrap(this);
38 | }
39 |
40 | @Override
41 | public void parallaxViewBy(View view, float multiplier) {
42 | mParallaxViewController.parallaxViewBy(view, multiplier);
43 | }
44 |
45 | @Override
46 | public void parallaxViewBy(View view, Transformer transformer, float multiplier) {
47 | mParallaxViewController.parallaxViewBy(view, transformer, multiplier);
48 | }
49 |
50 | @Override
51 | public void parallaxViewBackgroundBy(View view, Drawable drawable, float multiplier) {
52 | mParallaxViewController.parallaxViewBackgroundBy(view, drawable, multiplier);
53 | }
54 |
55 | @Override
56 | protected void onScrollChanged(int l, int t, int oldl, int oldt) {
57 | super.onScrollChanged(l, t, oldl, oldt);
58 | mParallaxViewController.onScrollChanged(this, l, t, oldl, oldt);
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/paralloid/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | mavenCentral()
4 | }
5 | dependencies {
6 | classpath 'com.android.tools.build:gradle:0.6.+'
7 | }
8 | }
9 | apply plugin: 'android-library'
10 |
11 | repositories {
12 | mavenCentral()
13 | }
14 |
15 | android {
16 | compileSdkVersion 19
17 | buildToolsVersion "19.0.0"
18 |
19 | defaultConfig {
20 | minSdkVersion 7
21 | targetSdkVersion 19
22 | }
23 | }
24 |
25 | dependencies {
26 | compile "com.android.support:support-v4:18.0.+"
27 | }
28 |
29 | uploadArchives {
30 | configuration = configurations.archives
31 | repositories.mavenDeployer {
32 | beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
33 |
34 | repository(url: sonatypeRepo) {
35 | authentication(
36 | userName: sonatypeUsername,
37 | password: sonatypePassword
38 | )
39 | }
40 |
41 | pom.project {
42 | name 'Paralloid'
43 | artifactId = 'paralloid'
44 | packaging 'aar'
45 | description 'Parallax library for Android'
46 | url 'https://github.com/chrisjenx/Paralloid'
47 |
48 | scm {
49 | url 'scm:git@github.com:chrisjenx/Paralloid.git'
50 | connection 'scm:git@github.com:chrisjenx/Paralloid.git'
51 | developerConnection 'scm:git@github.com:chrisjenx/Paralloid.git'
52 | }
53 |
54 | licenses {
55 | license {
56 | name 'The Apache Software License, Version 2.0'
57 | url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
58 | distribution 'repo'
59 | }
60 | }
61 |
62 | developers {
63 | developer {
64 | id 'chrisjenx'
65 | name 'Christopher Jenkins'
66 | email 'chris.mark.jenkins@gmail.com'
67 | }
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/paralloidviews/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | mavenCentral()
4 | }
5 | dependencies {
6 | classpath 'com.android.tools.build:gradle:0.6.+'
7 | }
8 | }
9 | apply plugin: 'android-library'
10 |
11 | repositories {
12 | mavenCentral()
13 | }
14 |
15 | android {
16 | compileSdkVersion 19
17 | buildToolsVersion "19.0.0"
18 |
19 | defaultConfig {
20 | minSdkVersion 14
21 | targetSdkVersion 19
22 | }
23 | }
24 |
25 | dependencies {
26 | compile project(':paralloid')
27 | }
28 |
29 | uploadArchives {
30 | configuration = configurations.archives
31 | repositories.mavenDeployer {
32 | beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
33 |
34 | repository(url: sonatypeRepo) {
35 | authentication(
36 | userName: sonatypeUsername,
37 | password: sonatypePassword
38 | )
39 | }
40 |
41 | pom.project {
42 | name 'Paralloid Views'
43 | artifactId = 'paralloidviews'
44 | packaging 'aar'
45 | description 'Parallax library for Android Extra Views'
46 | url 'https://github.com/chrisjenx/Paralloid'
47 |
48 | scm {
49 | url 'scm:git@github.com:chrisjenx/Paralloid.git'
50 | connection 'scm:git@github.com:chrisjenx/Paralloid.git'
51 | developerConnection 'scm:git@github.com:chrisjenx/Paralloid.git'
52 | }
53 |
54 | licenses {
55 | license {
56 | name 'The Apache Software License, Version 2.0'
57 | url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
58 | distribution 'repo'
59 | }
60 | }
61 |
62 | developers {
63 | developer {
64 | id 'chrisjenx'
65 | name 'Christopher Jenkins'
66 | email 'chris.mark.jenkins@gmail.com'
67 | }
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/paralloidviews/src/main/java/uk/co/chrisjenx/paralloid/views/ParallaxHorizontalScrollView.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloid.views;
2 |
3 | import android.content.Context;
4 | import android.graphics.drawable.Drawable;
5 | import android.util.AttributeSet;
6 | import android.view.View;
7 | import android.widget.HorizontalScrollView;
8 |
9 | import uk.co.chrisjenx.paralloid.ParallaxViewController;
10 | import uk.co.chrisjenx.paralloid.Parallaxor;
11 | import uk.co.chrisjenx.paralloid.transform.Transformer;
12 |
13 | /**
14 | * Created by chris on 02/10/2013
15 | * Project: Paralloid
16 | */
17 | public class ParallaxHorizontalScrollView extends HorizontalScrollView implements Parallaxor {
18 |
19 | ParallaxViewController mParallaxViewController;
20 |
21 | public ParallaxHorizontalScrollView(Context context) {
22 | super(context);
23 | init();
24 | }
25 |
26 | public ParallaxHorizontalScrollView(Context context, AttributeSet attrs) {
27 | super(context, attrs);
28 | init();
29 | }
30 |
31 | public ParallaxHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
32 | super(context, attrs, defStyle);
33 | init();
34 | }
35 |
36 | private void init() {
37 | mParallaxViewController = ParallaxViewController.wrap(this);
38 |
39 | }
40 |
41 | @Override
42 | public void parallaxViewBy(View view, float multiplier) {
43 | mParallaxViewController.parallaxViewBy(view, multiplier);
44 | }
45 |
46 | @Override
47 | public void parallaxViewBy(View view, Transformer transformer, float multiplier) {
48 | mParallaxViewController.parallaxViewBy(view, transformer, multiplier);
49 | }
50 |
51 | @Override
52 | public void parallaxViewBackgroundBy(View view, Drawable drawable, float multiplier) {
53 | mParallaxViewController.parallaxViewBackgroundBy(view, drawable, multiplier);
54 | }
55 |
56 | @Override
57 | protected void onScrollChanged(int l, int t, int oldl, int oldt) {
58 | super.onScrollChanged(l, t, oldl, oldt);
59 | mParallaxViewController.onScrollChanged(this, l, t, oldl, oldt);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/res/layout/fragment_home_dummy.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
10 |
11 |
16 |
17 |
22 |
23 |
26 |
27 |
30 |
31 |
34 |
35 |
38 |
39 |
42 |
43 |
46 |
47 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/paralloidexample/src/main/java/uk/co/chrisjenx/paralloidexample/ParallaxBackgroundListFragment.java:
--------------------------------------------------------------------------------
1 | package uk.co.chrisjenx.paralloidexample;
2 |
3 | import android.os.Bundle;
4 | import android.support.v4.app.Fragment;
5 | import android.view.LayoutInflater;
6 | import android.view.View;
7 | import android.view.ViewGroup;
8 | import android.widget.ListView;
9 | import android.widget.SimpleAdapter;
10 |
11 | import java.util.ArrayList;
12 | import java.util.HashMap;
13 | import java.util.List;
14 | import java.util.Map;
15 |
16 | import uk.co.chrisjenx.paralloid.Parallaxor;
17 |
18 | /**
19 | * A dummy fragment representing a section of the app, but that simply
20 | * displays dummy text.
21 | */
22 | public class ParallaxBackgroundListFragment extends Fragment {
23 |
24 | public ParallaxBackgroundListFragment() {
25 | }
26 |
27 | @Override
28 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
29 | Bundle savedInstanceState) {
30 | return inflater.inflate(R.layout.fragment_parallax_list_background, container, false);
31 | }
32 |
33 | @Override
34 | public void onViewCreated(View view, Bundle savedInstanceState) {
35 | super.onViewCreated(view, savedInstanceState);
36 | final ListView listView = (ListView) view.findViewById(R.id.list_view);
37 |
38 | List