From 1089b2745a1e49deec2385472b269c4ba3f37fed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Hor=C3=A1=C4=8Dek?= <horaceklubos@gmail.com> Date: Thu, 12 Mar 2015 19:35:13 +0100 Subject: [PATCH] #11 Scroll listeners --- .../screen/gamemenu/pages/GameMenuPage.java | 19 +++++-- .../cz/nic/tablexia/util/ui/ViewPager.java | 49 +++++++++++++++++++ 2 files changed, 63 insertions(+), 5 deletions(-) diff --git a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java index aa5acfa9c..7832ecebe 100644 --- a/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java +++ b/core/src/cz/nic/tablexia/screen/gamemenu/pages/GameMenuPage.java @@ -6,12 +6,14 @@ import com.badlogic.gdx.graphics.g2d.Batch; import cz.nic.tablexia.game.GameDefinition; import cz.nic.tablexia.screen.AbstractTablexiaScreen; import cz.nic.tablexia.screen.gamemenu.GameMenuAssets; +import cz.nic.tablexia.util.Log; +import cz.nic.tablexia.util.ui.ViewPager; /** * Representing one page in ViewPager with specific game * Created by lhoracek on 3/4/15. */ -public class GameMenuPage extends MenuPage { +public class GameMenuPage extends MenuPage implements ViewPager.ScrollListener { private GameDefinition game; public GameMenuPage(AbstractTablexiaScreen screen, GameDefinition game) { @@ -21,8 +23,6 @@ public class GameMenuPage extends MenuPage { @Override public void draw(Batch batch, float parentAlpha) { - // leave blending enabled for transparent images -// batch.disableBlending(); batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.BACK)), getX(), getY(), getWidth(), getHeight()); batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.MID)), getX(), getY(), getWidth(), getHeight()); batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.FORE)), getX(), getY(), getWidth(), getHeight()); @@ -37,7 +37,16 @@ public class GameMenuPage extends MenuPage { batch.draw(title, getX() + titleX, getY() + titleY - titleHeight, titleWidth, titleHeight); - //batch.draw(getScreen().getTexture(GameMenuAssets.getResourcePath(game, GameMenuAssets.GameMenuLayers.FORE)), getX(), getY(), getWidth(), getHeight()); -// batch.enableBlending(); + + } + + @Override + public void onScroll(float offset) { + Log.info(((Object) this).getClass().getName(), "Scroll " + game.name() + ": " + offset); + } + + @Override + public void onScrolledToPage() { + Log.info(((Object) this).getClass().getName(), "Scrolled to page: " + game.name()); } } diff --git a/core/src/cz/nic/tablexia/util/ui/ViewPager.java b/core/src/cz/nic/tablexia/util/ui/ViewPager.java index 8319d9758..3be659730 100644 --- a/core/src/cz/nic/tablexia/util/ui/ViewPager.java +++ b/core/src/cz/nic/tablexia/util/ui/ViewPager.java @@ -8,6 +8,8 @@ import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.utils.Array; +import cz.nic.tablexia.util.Log; + /** * Created by lhoracek on 3/4/15. */ @@ -79,6 +81,47 @@ public class ViewPager extends ScrollPane { } } + @Override + protected void scrollX(float pixelsX) { + super.scrollX(pixelsX); + + final float width = getWidth(); + final float scrollX = pixelsX; + final float maxX = getMaxX(); + + if (scrollX >= maxX || scrollX <= 0) return; + + Array<Actor> pages = content.getChildren(); + float pageX = 0; + float pageWidth = 0; + if (pages.size > 0) { + for (Actor a : pages) { + pageX = a.getX(); + pageWidth = a.getWidth(); + if (scrollX > pageX && scrollX < (pageX + pageWidth)) { + if (a instanceof ScrollListener) { + ScrollListener sl = (ScrollListener) a; + sl.onScroll(-(scrollX - pageX)); + } + } else if (scrollX < (pageX) && (scrollX + pageWidth) > pageX) { + if (a instanceof ScrollListener) { + ScrollListener sl = (ScrollListener) a; + sl.onScroll(pageX - scrollX); + } + + } + if(pageX == scrollX){ + if (a instanceof ScrollListener) { + ScrollListener sl = (ScrollListener) a; + sl.onScrolledToPage(); + } + } + } + } + + Log.info(((Object) this).getClass().getName(), "ScrollX: " + pixelsX); + } + @Override @Deprecated public void setWidget(Actor widget) { @@ -127,4 +170,10 @@ public class ViewPager extends ScrollPane { setScrollX(MathUtils.clamp(pageX - (width - pageWidth) / 2, 0, maxX)); } } + + public static interface ScrollListener { + public void onScroll(float offset); + + public void onScrolledToPage(); + } } -- GitLab