├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bg_parallax_pager.png ├── build.gradle ├── example ├── build.gradle ├── proguard-rules.txt └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ └── Bitter-Bold.ttf │ ├── java │ ├── com │ │ └── prolificinteractive │ │ │ └── parallaxproject │ │ │ ├── ParallaxActivity.java │ │ │ ├── ParallaxFragment.java │ │ │ └── SampleApplication.java │ └── uk │ │ └── co │ │ └── chrisjenx │ │ └── calligraphy │ │ └── OpenCalligraphyFactory.java │ └── res │ ├── drawable-hdpi │ └── ic_launcher.png │ ├── drawable-xhdpi │ └── ic_launcher.png │ ├── drawable-xxhdpi │ ├── earth.jpg │ ├── ic_launcher.png │ ├── jupiter.jpg │ ├── mars.jpg │ ├── mercury.jpg │ ├── neptune.jpg │ ├── saturn.jpg │ ├── uranus.jpg │ └── venus.jpg │ ├── layout │ ├── activity_parallax.xml │ ├── fragment_parallax.xml │ ├── parallax_view_1.xml │ ├── parallax_view_2.xml │ ├── parallax_view_3.xml │ └── parallax_view_4.xml │ └── values │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── gradle.properties ├── gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── parallaxpager ├── build.gradle ├── proguard-rules.txt └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── prolificinteractive │ │ └── parallaxpager │ │ ├── OnViewCreatedListener.java │ │ ├── ParallaxContainer.java │ │ ├── ParallaxContextWrapper.java │ │ ├── ParallaxFactory.java │ │ ├── ParallaxLayoutInflater.java │ │ ├── ParallaxPagerAdapter.java │ │ ├── ParallaxViewTag.java │ │ └── ReflectionUtils.java │ └── res │ └── values │ ├── attrs.xml │ └── ids.xml └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | .DS_Store 3 | 4 | # android 5 | gen 6 | bin 7 | obj 8 | 9 | # gradle 10 | build 11 | .gradle 12 | 13 | # intellij 14 | .idea 15 | *.iml 16 | 17 | # eclipse 18 | local.properties 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | Change Log 2 | ========== 3 | Version 2.2.2 *(2018-5-3)* 4 | ---------------------------- 5 | 6 | * Upgrade: Gradle file 7 | * Upgrade: Moved to Jitpack 8 | * Updated: ReadMe 9 | 10 | Version 2.2.0 *(2015-02-23)* 11 | ---------------------------- 12 | 13 | * New: added `override_visibility` attribute to allow for overriding the default visibility behaviour. 14 | When false, it will act as it has; true will not change the visibility of the View at all, 15 | leaving it to the implementer. 16 | 17 | 18 | Version 2.1.0 *(2015-02-19)* 19 | ---------------------------- 20 | 21 | * New: `ParallaxContainer.setOnPageChangeListener()` to access page change events of the 22 | underlying ViewPager. This means that `ParallaxContainer.attachOnPageChangeListener()` is now 23 | deprecated. You should use the listener setter from above. 24 | * New: `ParallaxContainer.getViewPager()` to allow access to the underlying ViewPager for 25 | existing code that relies on having a ViewPager instance. 26 | 27 | 28 | Version 2.0.0 *(2015-02-17)* 29 | ---------------------------- 30 | 31 | * Release should be mostly backwards compatible with v1.0.0, but the sweeping changes to the 32 | subsystem merited a major bump. 33 | * Bugfix: Fix targeting API v21 34 | * New: Ability to add custom listeners to the View creation process. 35 | This is to help work around an issue with trying to have multiple ContextWrappers meddle with 36 | the view creation process. See sample project for Calligraphy example. 37 | 38 | 39 | Version 1.0.0 40 | ------------- 41 | 42 | * Start of ChangeLog 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 Prolific Interactive. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Parallax Pager 4 | [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-ParallaxPager-blue.svg?style=true)](https://android-arsenal.com/details/1/537) 5 | [![](https://jitpack.io/v/prolificinteractive/ParallaxPager.svg)](https://jitpack.io/#prolificinteractive/ParallaxPager) 6 | 7 | 8 | Add some depth to your Android scrolling using the parallax effect! 9 | 10 | ## Installation 11 | 12 | Step 1. Add the JitPack repository to your build file 13 | 14 | ```groovy 15 | allprojects { 16 | repositories { 17 | ... 18 | maven { url 'https://jitpack.io' } 19 | } 20 | } 21 | ``` 22 | 23 | Step 2. Add the dependency 24 | 25 | ```groovy 26 | dependencies { 27 | implementation 'com.github.prolificinteractive:parallaxpager:${parallaxpagerVersion}' 28 | } 29 | ``` 30 | 31 | ## Usage 32 | 33 | 34 | There are 4 important steps: 35 | 36 | 1. Use a `ParallaxContainer` in layout XML 37 | 38 | 2. Create a layout XML file for each page 39 | 40 | 3. Wrap the Activity Context 41 | 42 | 4. Add the attachment code to `onCreate` of your Activity or `onCreateView` of your Fragment 43 | 44 | 45 | ## 1. Use a `ParallaxContainer` in layout XML 46 | 47 | Use the class `com.prolificinteractive.parallaxpager.ParallaxContainer` in your layout XML, sizing it however you like. 48 | 49 | Ex: 50 | 51 | ```xml 52 | 56 | ``` 57 | 58 | 59 | ## 2. Create a layout XML file for each page 60 | 61 | Each page must have its own layout XML file. Use whichever Layouts or Views you like, as usual. 62 | 63 | Ensure this line is added to the Root Element: 64 | 65 | >xmlns:app="http://schemas.android.com/apk/res-auto" 66 | 67 | Assign any combination of the following attributes (all floats): 68 | 69 | * `x_in`: as the View **enters** the screen, it will translate in the horizontal direction along with user swiping, at a rate multiplied by this value. Default is `0`. 70 | 71 | * `x_out`: as the View **leaves** the screen, it will translate in the horizontal direction along with user swiping, at a rate multiplied by this value. Default is `0`. 72 | 73 | * `y_in`: as the View **enters** the screen, it will translate **downward** as the user swipes right to left, at a rate multiplied by this value. Default is `0`. 74 | 75 | * `y_out`: as the View **leaves** the screen, it will translate **upward** as the user swipes right to left, at a rate multiplied by this value. Default is `0`. 76 | 77 | * `a_in`: as the View **enters** the screen, it will **fade in** as the user swipes right to left, at a rate multiplied by this value. Default is `0`. 78 | 79 | * `a_out`: as the View **leaves** the screen, it will **fade out** as the user swipes right to left, at a rate multiplied by this value. Default is `0`. 80 | 81 | Ex: 82 | 83 | ```xml 84 | 85 | 90 | 91 | 102 | 103 | 114 | 115 | ``` 116 | 117 | Keep in mind that negative values mean a change in direction for translation effects, and have no effect for alpha. For translation effects, values between `0` and `1` will result in a high level of funkiness. 118 | 119 | 120 | ## 3. Wrap the Activity Context 121 | Wrap the activity context using `com.prolificinteractive.parallaxpager.ParallaxContextWrapper` in your activity. 122 | 123 | Ex: 124 | 125 | ```java 126 | @Override 127 | protected void attachBaseContext(Context newBase) { 128 | super.attachBaseContext(new ParallaxContextWrapper(newBase)); 129 | } 130 | ``` 131 | 132 | **Note**: If you are using this in conjunction with another library that wraps Context, it doesn't appear to like chaining them together. 133 | Instead, we've added the ability to hook into the View creation process to use with other libraries. 134 | The sample project shows how to hook into Calligraphy. 135 | 136 | Ex: 137 | 138 | ```java 139 | @Override 140 | protected void attachBaseContext(Context newBase) { 141 | super.attachBaseContext( 142 | new ParallaxContextWrapper(newBase, new OnViewCreatedListener() { 143 | @Override public View onViewCreated(View view, Context context, AttributeSet attrs) { 144 | //Setup view as needed 145 | return view; //Return the view passed in 146 | } 147 | }) 148 | ); 149 | } 150 | ``` 151 | 152 | 153 | ## 4. Add the attachment code to `onCreate` of your Activity or `onCreateView` of your Fragment 154 | 155 | Important steps in `onCreate` of an Activity (or `onCreateView` of a Fragment): 156 | 157 | * Find the parallax container by ID 158 | 159 | * Specify whether the pager should loop (`true` means it *will* loop) 160 | 161 | * Submit a **Layout Inflater** and list the layouts for each page (in order). Currently there must be at least 2 in this list (repeats allowed). 162 | 163 | Ex: 164 | 165 | ```java 166 | // find the parallax container 167 | ParallaxContainer parallaxContainer = (ParallaxContainer) findViewById(R.id.parallax_container); 168 | 169 | // specify whether pager will loop 170 | parallaxContainer.setLooping(true); 171 | 172 | // wrap the inflater and inflate children with custom attributes 173 | parallaxContainer.setupChildren(getLayoutInflater(), 174 | R.layout.parallax_view_1, 175 | R.layout.parallax_view_2, 176 | R.layout.parallax_view_3, 177 | R.layout.parallax_view_4); 178 | ``` 179 | 180 | Extras 181 | ====== 182 | 183 | ## Extra 1. Setting a `ViewPager.OnPageChangeListener` 184 | 185 | You can set a `ViewPager.OnPageChangeListener` after the attachment code in step 4. 186 | 187 | ```java 188 | // optionally set a ViewPager.OnPageChangeListener 189 | parallaxContainer.setOnPageChangeListener(this); 190 | ``` 191 | 192 | ## Extra 2. `ViewPager` access 193 | 194 | You have access to the `ViewPager` by calling: 195 | 196 | ```java 197 | parallaxContainer.getViewPager(); 198 | ``` 199 | 200 | This is exposed for use with existing code which requires a `ViewPager` instance. Please make sure that if you call methods like `setAdapter` or `setOnPageChangeListener` on the instance returned, that you do so with forethought and good reason. 201 | 202 | ## Extra 3. Overriding parallax visibility 203 | 204 | Parallax views will be `VISIBLE` when onscreen, and `GONE` when offscreen. If you need to override this behavior, set this attribute on your View in XML: 205 | 206 | ```xml 207 | app:override_visibility="true" 208 | ``` 209 | 210 | 211 | ## Contributing 212 | 213 | To report a bug or enhancement request, feel free to file an issue under the respective heading. If you wish to contribute to the project, fork this repo and submit a pull request. 214 | 215 | 216 | Code contributions should follow the standards specified in the [Prolific Android Code Style](https://github.com/prolificinteractive/android-code-styles). 217 | 218 | 219 | ## License 220 | 221 | ![prolific](https://s3.amazonaws.com/prolificsitestaging/logos/Prolific_Logo_Full_Color.png) 222 | 223 | Copyright (c) 2018 Prolific Interactive 224 | 225 | Parallax Pager is maintained and sponsored by Prolific Interactive. It may be redistributed under the terms specified in the [LICENSE] file. 226 | 227 | [LICENSE]: ./LICENSE 228 | -------------------------------------------------------------------------------- /bg_parallax_pager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/bg_parallax_pager.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | google() 6 | jcenter() 7 | } 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.1.2' 10 | classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /example/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'com.github.dcendents.android-maven' 3 | group='com.github.prolificinteractive' 4 | android { 5 | compileSdkVersion 27 6 | buildToolsVersion "23.0.3" 7 | 8 | defaultConfig { 9 | minSdkVersion 16 10 | targetSdkVersion 27 11 | versionCode 1 12 | versionName version 13 | } 14 | 15 | compileOptions { 16 | sourceCompatibility JavaVersion.VERSION_1_7 17 | targetCompatibility JavaVersion.VERSION_1_7 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation project(':parallaxpager') 23 | implementation 'uk.co.chrisjenx:calligraphy:2.3.0' 24 | implementation 'com.android.support:appcompat-v7:27.1.1' 25 | } 26 | -------------------------------------------------------------------------------- /example/proguard-rules.txt: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the ProGuard 5 | # include property in project.properties. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} -------------------------------------------------------------------------------- /example/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /example/src/main/assets/Bitter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/assets/Bitter-Bold.ttf -------------------------------------------------------------------------------- /example/src/main/java/com/prolificinteractive/parallaxproject/ParallaxActivity.java: -------------------------------------------------------------------------------- 1 | package com.prolificinteractive.parallaxproject; 2 | 3 | import android.content.Context; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | import com.prolificinteractive.parallaxpager.ParallaxContextWrapper; 8 | 9 | import uk.co.chrisjenx.calligraphy.OpenCalligraphyFactory; 10 | 11 | public class ParallaxActivity extends AppCompatActivity { 12 | 13 | @Override protected void attachBaseContext(Context newBase) { 14 | //ParallaxPager and Calligraphy don't seem to play nicely together 15 | //The solution was to add a listener for view creation events so that we can hook up 16 | // Calligraphy to our view creation calls instead. 17 | super.attachBaseContext( 18 | new ParallaxContextWrapper(newBase, new OpenCalligraphyFactory()) 19 | ); 20 | } 21 | 22 | ////Normal Usage 23 | //@Override protected void attachBaseContext(Context newBase) { 24 | // super.attachBaseContext(new ParallaxContextWrapper(newBase)); 25 | //} 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.activity_parallax); 31 | 32 | if (savedInstanceState == null) { 33 | getSupportFragmentManager().beginTransaction() 34 | .add(R.id.content, new ParallaxFragment()) 35 | .commit(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /example/src/main/java/com/prolificinteractive/parallaxproject/ParallaxFragment.java: -------------------------------------------------------------------------------- 1 | package com.prolificinteractive.parallaxproject; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.app.Fragment; 5 | import android.support.v4.view.ViewPager; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import android.widget.ImageView; 10 | import android.widget.Toast; 11 | import com.prolificinteractive.parallaxpager.ParallaxContainer; 12 | 13 | public class ParallaxFragment extends Fragment implements ViewPager.OnPageChangeListener { 14 | 15 | ImageView mEarthImageView; 16 | 17 | @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, 18 | Bundle savedInstanceState) { 19 | 20 | View view = inflater.inflate(R.layout.fragment_parallax, container, false); 21 | 22 | // find the parallax container 23 | ParallaxContainer parallaxContainer = 24 | (ParallaxContainer) view.findViewById(R.id.parallax_container); 25 | 26 | // specify whether pager will loop 27 | parallaxContainer.setLooping(true); 28 | 29 | // wrap the inflater and inflate children with custom attributes 30 | parallaxContainer.setupChildren(inflater, 31 | R.layout.parallax_view_1, 32 | R.layout.parallax_view_2, 33 | R.layout.parallax_view_3, 34 | R.layout.parallax_view_4); 35 | 36 | // optionally set a ViewPager.OnPageChangeListener 37 | parallaxContainer.setOnPageChangeListener(this); 38 | 39 | view.findViewById(R.id.btn_new_frag).setOnClickListener(new View.OnClickListener() { 40 | @Override public void onClick(View v) { 41 | getFragmentManager().beginTransaction() 42 | .replace(R.id.content, new Fragment()) 43 | .addToBackStack("test") 44 | .commit(); 45 | } 46 | }); 47 | 48 | // Earth ImageView has `override_visibility` set to `true` so we need to manually manage visibility 49 | mEarthImageView = (ImageView) view.findViewById(R.id.imageview_earth); 50 | 51 | return view; 52 | } 53 | 54 | @Override public void onPageScrolled(int position, float offset, int offsetPixels) { 55 | // example of manually setting view visibility 56 | if (position == 1 && offset > 0.2) { 57 | // just before leaving the screen, Earth will disappear 58 | mEarthImageView.setVisibility(View.INVISIBLE); 59 | } else if (position == 0 || position == 1) { 60 | mEarthImageView.setVisibility(View.VISIBLE); 61 | } else { 62 | mEarthImageView.setVisibility(View.GONE); 63 | } 64 | } 65 | 66 | @Override public void onPageSelected(int position) { 67 | Toast.makeText(getActivity(), "Page Selected: " + position, Toast.LENGTH_SHORT).show(); 68 | } 69 | 70 | @Override public void onPageScrollStateChanged(int state) { 71 | 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /example/src/main/java/com/prolificinteractive/parallaxproject/SampleApplication.java: -------------------------------------------------------------------------------- 1 | package com.prolificinteractive.parallaxproject; 2 | 3 | import android.app.Application; 4 | import uk.co.chrisjenx.calligraphy.CalligraphyConfig; 5 | 6 | public class SampleApplication extends Application { 7 | 8 | @Override public void onCreate() { 9 | super.onCreate(); 10 | 11 | CalligraphyConfig.initDefault( 12 | new CalligraphyConfig.Builder() 13 | .setDefaultFontPath("Bitter-Bold.ttf") 14 | .build() 15 | ); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /example/src/main/java/uk/co/chrisjenx/calligraphy/OpenCalligraphyFactory.java: -------------------------------------------------------------------------------- 1 | package uk.co.chrisjenx.calligraphy; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | import com.prolificinteractive.parallaxpager.OnViewCreatedListener; 7 | 8 | /** 9 | * {@linkplain uk.co.chrisjenx.calligraphy.CalligraphyFactory} is a package local class, 10 | * so in order to get access to the 11 | * {@linkplain #onViewCreated(android.view.View, android.content.Context, android.util.AttributeSet)} 12 | * we need to subclass this in the same package. 13 | * This also implements {@linkplain com.prolificinteractive.parallaxpager.OnViewCreatedListener} as 14 | * a convenience. 15 | */ 16 | public class OpenCalligraphyFactory extends CalligraphyFactory implements OnViewCreatedListener { 17 | 18 | public OpenCalligraphyFactory() { 19 | super(CalligraphyConfig.get().getAttrId()); 20 | } 21 | 22 | public OpenCalligraphyFactory(int attributeId) { 23 | super(attributeId); 24 | } 25 | 26 | @Override 27 | public View onViewCreated(View view, Context context, AttributeSet attrs) { 28 | return super.onViewCreated(view, context, attrs); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /example/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/earth.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/earth.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/jupiter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/jupiter.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/mars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/mars.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/mercury.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/mercury.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/neptune.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/neptune.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/saturn.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/saturn.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/uranus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/uranus.jpg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/venus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/prolificinteractive/ParallaxPager/1e76f85cf20e7cf9fa36247a3ebedd60495f057e/example/src/main/res/drawable-xxhdpi/venus.jpg -------------------------------------------------------------------------------- /example/src/main/res/layout/activity_parallax.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /example/src/main/res/layout/fragment_parallax.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 17 | 18 | 24 | 25 |