Skip to content

Commit

Permalink
Added parallax feature to simple slide
Browse files Browse the repository at this point in the history
  • Loading branch information
heinrichreimer committed Jun 23, 2016
1 parent 2facd23 commit 32bafa3
Show file tree
Hide file tree
Showing 4 changed files with 96 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.ColorRes;
import android.support.annotation.FloatRange;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.v4.app.Fragment;
import android.support.v7.view.ContextThemeWrapper;
Expand All @@ -14,10 +12,7 @@
import android.view.ViewGroup;

import com.heinrichreimersoftware.materialintro.app.SlideFragment;
import com.heinrichreimersoftware.materialintro.view.parallax.Parallaxable;

import java.util.LinkedList;
import java.util.Queue;
import com.heinrichreimersoftware.materialintro.view.parallax.ParallaxFragment;

public class FragmentSlide implements Slide, RestorableSlide {

Expand Down Expand Up @@ -128,15 +123,12 @@ public FragmentSlide build(){
}
}

public static class FragmentSlideFragment extends Fragment implements Parallaxable {
public static class FragmentSlideFragment extends ParallaxFragment {
private static final String ARGUMENT_LAYOUT_RES =
"com.heinrichreimersoftware.materialintro.SimpleFragment.ARGUMENT_LAYOUT_RES";
private static final String ARGUMENT_THEME_RES =
"com.heinrichreimersoftware.materialintro.SimpleFragment.ARGUMENT_THEME_RES";

@Nullable
private Parallaxable parallaxLayout;

public FragmentSlideFragment() {
}

Expand Down Expand Up @@ -167,32 +159,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
}
LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);

View root = localInflater.inflate(getArguments().getInt(ARGUMENT_LAYOUT_RES), container, false);
parallaxLayout = findParallaxLayout(root);
return root;
}

public Parallaxable findParallaxLayout(View root) {
Queue<View> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
View child = queue.remove();
if (child instanceof Parallaxable) {
return (Parallaxable) child;
} else if (child instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) child;
for (int i = viewGroup.getChildCount() - 1; i >= 0; i--) {
queue.add(viewGroup.getChildAt(i));
}
}
}
return null;
}

@Override
public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) {
if (parallaxLayout != null)
parallaxLayout.setOffset(offset);
return localInflater.inflate(getArguments().getInt(ARGUMENT_LAYOUT_RES), container, false);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import android.widget.TextView;

import com.heinrichreimersoftware.materialintro.R;
import com.heinrichreimersoftware.materialintro.app.SlideFragment;
import com.heinrichreimersoftware.materialintro.view.parallax.ParallaxSlideFragment;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -314,7 +314,7 @@ public SimpleSlide build() {
}
}

public static class SimpleSlideFragment extends SlideFragment {
public static class SimpleSlideFragment extends ParallaxSlideFragment {
private static final String ARGUMENT_TITLE =
"com.heinrichreimersoftware.materialintro.SimpleFragment.ARGUMENT_TITLE";
private static final String ARGUMENT_TITLE_RES =
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.heinrichreimersoftware.materialintro.view.parallax;

import android.os.Bundle;
import android.support.annotation.FloatRange;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.View;
import android.view.ViewGroup;

import java.util.LinkedList;
import java.util.Queue;

public class ParallaxFragment extends Fragment implements Parallaxable {
@Nullable
private Parallaxable parallaxLayout;

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
parallaxLayout = findParallaxLayout(view);
}

public Parallaxable findParallaxLayout(View root) {
Queue<View> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
View child = queue.remove();
if (child instanceof Parallaxable) {
return (Parallaxable) child;
}
else if (child instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) child;
for (int i = viewGroup.getChildCount() - 1; i >= 0; i--) {
queue.add(viewGroup.getChildAt(i));
}
}
}
return null;
}

@Override
public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) {
if (parallaxLayout != null)
parallaxLayout.setOffset(offset);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.heinrichreimersoftware.materialintro.view.parallax;

import android.os.Bundle;
import android.support.annotation.FloatRange;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;

import com.heinrichreimersoftware.materialintro.app.SlideFragment;

import java.util.LinkedList;
import java.util.Queue;

public class ParallaxSlideFragment extends SlideFragment implements Parallaxable {
@Nullable
private Parallaxable parallaxLayout;

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
parallaxLayout = findParallaxLayout(view);
}

public Parallaxable findParallaxLayout(View root) {
Queue<View> queue = new LinkedList<>();
queue.add(root);
while (!queue.isEmpty()) {
View child = queue.remove();
if (child instanceof Parallaxable) {
return (Parallaxable) child;
}
else if (child instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) child;
for (int i = viewGroup.getChildCount() - 1; i >= 0; i--) {
queue.add(viewGroup.getChildAt(i));
}
}
}
return null;
}

@Override
public void setOffset(@FloatRange(from = -1.0, to = 1.0) float offset) {
if (parallaxLayout != null)
parallaxLayout.setOffset(offset);
}
}

0 comments on commit 32bafa3

Please sign in to comment.