diff --git a/build.gradle b/build.gradle index 7228174..e006ab4 100644 --- a/build.gradle +++ b/build.gradle @@ -1,25 +1,17 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. - buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath 'com.android.tools.build:gradle:3.2.1' } } -ext { - supportLibraryVersion = '26.1.0' -} - allprojects { repositories { + google() jcenter() - maven { url "https://maven.google.com" } } } diff --git a/gradle.properties b/gradle.properties index aac7c9b..9e6fce1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bba96fe..7ce1f8a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-all.zip diff --git a/library/build.gradle b/library/build.gradle index aff62cb..f9ad394 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -9,12 +9,11 @@ ext { } android { - compileSdkVersion 26 - buildToolsVersion "26.0.1" + compileSdkVersion 28 defaultConfig { - minSdkVersion 16 - targetSdkVersion 26 + minSdkVersion 19 + targetSdkVersion 28 versionCode 1 versionName "1.0" } @@ -27,12 +26,12 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion" - compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion" + implementation "androidx.appcompat:appcompat:1.0.0" + implementation "androidx.recyclerview:recyclerview:1.0.0" - compile "com.andkulikov:transitionseverywhere:1.7.6" + implementation "com.andkulikov:transitionseverywhere:1.8.0" } apply from: 'https://raw.githubusercontent.com/blundell/release-android-library/master/android-release-aar.gradle' \ No newline at end of file diff --git a/library/src/main/java/cz/intik/overflowindicator/OverflowDataObserver.java b/library/src/main/java/cz/intik/overflowindicator/OverflowDataObserver.java index ca18423..b322310 100644 --- a/library/src/main/java/cz/intik/overflowindicator/OverflowDataObserver.java +++ b/library/src/main/java/cz/intik/overflowindicator/OverflowDataObserver.java @@ -1,49 +1,49 @@ package cz.intik.overflowindicator; -import android.support.v7.widget.RecyclerView; +import androidx.recyclerview.widget.RecyclerView; /** * Data observer which notifies {@link OverflowPagerIndicator} of changed data * * @author Petr Introvic - * created 03.10.2017. + * created 03.10.2017. */ class OverflowDataObserver extends RecyclerView.AdapterDataObserver { - private OverflowPagerIndicator mOverflowPagerIndicator; - - OverflowDataObserver(OverflowPagerIndicator overflowPagerIndicator) { - mOverflowPagerIndicator = overflowPagerIndicator; - } - - @Override - public void onChanged() { - mOverflowPagerIndicator.updateIndicatorsCount(); - } - - @Override - public void onItemRangeInserted(int positionStart, int itemCount) { - mOverflowPagerIndicator.updateIndicatorsCount(); - } - - @Override - public void onItemRangeChanged(int positionStart, int itemCount) { - mOverflowPagerIndicator.updateIndicatorsCount(); - } - - @Override - public void onItemRangeChanged(int positionStart, int itemCount, Object payload) { - mOverflowPagerIndicator.updateIndicatorsCount(); - } - - @Override - public void onItemRangeRemoved(int positionStart, int itemCount) { - mOverflowPagerIndicator.updateIndicatorsCount(); - } - - @Override - public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { - mOverflowPagerIndicator.updateIndicatorsCount(); - } + private OverflowPagerIndicator mOverflowPagerIndicator; + + OverflowDataObserver(OverflowPagerIndicator overflowPagerIndicator) { + mOverflowPagerIndicator = overflowPagerIndicator; + } + + @Override + public void onChanged() { + mOverflowPagerIndicator.updateIndicatorsCount(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + mOverflowPagerIndicator.updateIndicatorsCount(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount) { + mOverflowPagerIndicator.updateIndicatorsCount(); + } + + @Override + public void onItemRangeChanged(int positionStart, int itemCount, Object payload) { + mOverflowPagerIndicator.updateIndicatorsCount(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + mOverflowPagerIndicator.updateIndicatorsCount(); + } + + @Override + public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { + mOverflowPagerIndicator.updateIndicatorsCount(); + } } diff --git a/library/src/main/java/cz/intik/overflowindicator/OverflowPagerIndicator.java b/library/src/main/java/cz/intik/overflowindicator/OverflowPagerIndicator.java index 826b08a..9e15003 100644 --- a/library/src/main/java/cz/intik/overflowindicator/OverflowPagerIndicator.java +++ b/library/src/main/java/cz/intik/overflowindicator/OverflowPagerIndicator.java @@ -1,23 +1,27 @@ package cz.intik.overflowindicator; import android.content.Context; -import android.support.annotation.Nullable; -import android.support.v7.widget.PagerSnapHelper; -import android.support.v7.widget.RecyclerView; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.transition.ChangeBounds; +import android.transition.Fade; +import android.transition.Transition; +import android.transition.TransitionManager; +import android.transition.TransitionSet; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; import android.view.View; import android.widget.LinearLayout; -import com.transitionseverywhere.ChangeBounds; -import com.transitionseverywhere.Fade; -import com.transitionseverywhere.Transition; -import com.transitionseverywhere.TransitionManager; -import com.transitionseverywhere.TransitionSet; - import java.util.Arrays; +import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.PagerSnapHelper; +import androidx.recyclerview.widget.RecyclerView; + /** * Pager indicator widget *

@@ -26,200 +30,234 @@ * or with custom logic which calls {@link #onPageSelected(int)} * * @author Petr Introvic - * created 07.06.2017. + * created 07.06.2017. */ public class OverflowPagerIndicator extends LinearLayout { - private static final int MAX_INDICATORS = 9; - private static final int INDICATOR_SIZE_DIP = 12; - private static final int INDICATOR_MARGIN_DIP = 2; - - // State also represents indicator scale factor - private static final float STATE_GONE = 0; - private static final float STATE_SMALLEST = 0.2f; - private static final float STATE_SMALL = 0.4f; - private static final float STATE_NORMAL = 0.6f; - private static final float STATE_SELECTED = 1.0f; - - private int mIndicatorCount; - private int mLastSelected; - private int mIndicatorSize; - private int mIndicatorMargin; - - private RecyclerView mRecyclerView; - private OverflowDataObserver mDataObserver; - - public OverflowPagerIndicator(Context context, AttributeSet attrs) { - super(context, attrs); - - DisplayMetrics dm = getResources().getDisplayMetrics(); - mIndicatorSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, INDICATOR_SIZE_DIP, dm); - mIndicatorMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, INDICATOR_MARGIN_DIP, dm); - - mDataObserver = new OverflowDataObserver(this); - } - - @Override - protected void onDetachedFromWindow() { - if (mRecyclerView != null) { - try { - mRecyclerView.getAdapter().unregisterAdapterDataObserver(mDataObserver); - } catch (IllegalStateException ise) { - // Do nothing - } - } - - super.onDetachedFromWindow(); - } - - /** - * @param position Page to be selected - */ - public void onPageSelected(int position) { - if (mIndicatorCount > MAX_INDICATORS) { - updateOverflowState(position); - } else { - updateSimpleState(position); - } - } - - /** - * @param recyclerView Target recycler view - */ - public void attachToRecyclerView(final RecyclerView recyclerView) { - mRecyclerView = recyclerView; - mRecyclerView.getAdapter().registerAdapterDataObserver(mDataObserver); - - initIndicators(); - } - - void updateIndicatorsCount() { - if (mIndicatorCount != mRecyclerView.getAdapter().getItemCount()) { - initIndicators(); - } - } - - private void initIndicators() { - mLastSelected = -1; - mIndicatorCount = mRecyclerView.getAdapter().getItemCount(); - createIndicators(mIndicatorSize, mIndicatorMargin); - onPageSelected(0); - } - - private void updateSimpleState(int position) { - if (mLastSelected != -1) { - animateViewScale(getChildAt(mLastSelected), STATE_NORMAL); - } - - animateViewScale(getChildAt(position), STATE_SELECTED); - - mLastSelected = position; - } - - private void updateOverflowState(int position) { - if (mIndicatorCount == 0) { - return; - } - - if(position < 0 || position > mIndicatorCount){ - return; - } - - Transition transition = new TransitionSet() - .setOrdering(TransitionSet.ORDERING_TOGETHER) - .addTransition(new ChangeBounds()) - .addTransition(new Fade()); - - TransitionManager.beginDelayedTransition(this, transition); - - float[] positionStates = new float[mIndicatorCount + 1]; - Arrays.fill(positionStates, STATE_GONE); - - int start = position - MAX_INDICATORS + 4; - int realStart = Math.max(0, start); - - if (realStart + MAX_INDICATORS > mIndicatorCount) { - realStart = mIndicatorCount - MAX_INDICATORS; - positionStates[mIndicatorCount - 1] = STATE_NORMAL; - positionStates[mIndicatorCount - 2] = STATE_NORMAL; - } else { - if (realStart + MAX_INDICATORS - 2 < mIndicatorCount) { - positionStates[realStart + MAX_INDICATORS - 2] = STATE_SMALL; - } - if (realStart + MAX_INDICATORS - 1 < mIndicatorCount) { - positionStates[realStart + MAX_INDICATORS - 1] = STATE_SMALLEST; - } - } - - for (int i = realStart; i < realStart + MAX_INDICATORS - 2; i++) { - positionStates[i] = STATE_NORMAL; - } - - if (position > 5) { - positionStates[realStart] = STATE_SMALLEST; - positionStates[realStart + 1] = STATE_SMALL; - } else if (position == 5) { - positionStates[realStart] = STATE_SMALL; - } - - positionStates[position] = STATE_SELECTED; - - updateIndicators(positionStates); - - mLastSelected = position; - } - - private void updateIndicators(float[] positionStates) { - for (int i = 0; i < mIndicatorCount; i++) { - View v = getChildAt(i); - float state = positionStates[i]; - - if (state == STATE_GONE) { - v.setVisibility(GONE); - - } else { - v.setVisibility(VISIBLE); - animateViewScale(v, state); - } - - } - } - - private void createIndicators(int indicatorSize, int margin) { - removeAllViews(); - - if (mIndicatorCount <= 1) { - return; - } - - for (int i = 0; i < mIndicatorCount; i++) { - addIndicator(mIndicatorCount > MAX_INDICATORS, indicatorSize, margin); - } - } - - private void addIndicator(boolean isOverflowState, int indicatorSize, int margin) { - View view = new View(getContext()); - view.setBackgroundResource(R.drawable.dot); - if (isOverflowState) { - animateViewScale(view, STATE_SMALLEST); - } else { - animateViewScale(view, STATE_NORMAL); - } - - MarginLayoutParams params = new MarginLayoutParams(indicatorSize, indicatorSize); - params.leftMargin = margin; - params.rightMargin = margin; - - addView(view, params); - } - - private void animateViewScale(@Nullable View view, float scale) { - if (view == null) { - return; - } - - view.animate() - .scaleX(scale) - .scaleY(scale); - } + private static final int MAX_INDICATORS = 9; + private static final int INDICATOR_SIZE_DIP = 12; + private static final int INDICATOR_MARGIN_DIP = 2; + + // State also represents indicator scale factor + private static final float STATE_GONE = 0; + private static final float STATE_SMALLEST = 0.2f; + private static final float STATE_SMALL = 0.4f; + private static final float STATE_NORMAL = 0.6f; + private static final float STATE_SELECTED = 1.0f; + + private int mIndicatorCount; + private int mLastSelected; + private int mIndicatorSize; + private int mIndicatorMargin; + + private RecyclerView mRecyclerView; + private OverflowDataObserver mDataObserver; + + private int dotStrokeColor; + private int dotFillColor; + + public OverflowPagerIndicator(Context context, AttributeSet attrs) { + super(context, attrs); + initAttrs(context, attrs); + + DisplayMetrics dm = getResources().getDisplayMetrics(); + mIndicatorSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, INDICATOR_SIZE_DIP, dm); + mIndicatorMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, INDICATOR_MARGIN_DIP, dm); + + mDataObserver = new OverflowDataObserver(this); + } + + private void initAttrs(Context context, AttributeSet attrs) { + dotFillColor = ContextCompat.getColor(context, R.color.dot_fill); + dotStrokeColor = ContextCompat.getColor(context, R.color.dot_stroke); + + if (attrs != null) { + TypedArray attributeArray = context.obtainStyledAttributes(attrs, R.styleable.OverflowPagerIndicator); + + if (attributeArray != null) { + if (attributeArray.hasValue(R.styleable.OverflowPagerIndicator_dotFillColor)) { + dotFillColor = attributeArray.getColor(R.styleable.OverflowPagerIndicator_dotFillColor, dotFillColor); + } + + if (attributeArray.hasValue(R.styleable.OverflowPagerIndicator_dotStrokeColor)) { + dotStrokeColor = attributeArray.getColor(R.styleable.OverflowPagerIndicator_dotStrokeColor, dotStrokeColor); + } + + attributeArray.recycle(); + } + } + } + + @Override + protected void onDetachedFromWindow() { + if (mRecyclerView != null) { + try { + mRecyclerView.getAdapter().unregisterAdapterDataObserver(mDataObserver); + } catch (IllegalStateException ise) { + // Do nothing + } + } + + super.onDetachedFromWindow(); + } + + /** + * @param position Page to be selected + */ + public void onPageSelected(int position) { + if (mIndicatorCount > MAX_INDICATORS) { + updateOverflowState(position); + } else { + updateSimpleState(position); + } + } + + /** + * @param recyclerView Target recycler view + */ + public void attachToRecyclerView(final RecyclerView recyclerView) { + mRecyclerView = recyclerView; + mRecyclerView.getAdapter().registerAdapterDataObserver(mDataObserver); + + initIndicators(); + } + + void updateIndicatorsCount() { + if (mIndicatorCount != mRecyclerView.getAdapter().getItemCount()) { + initIndicators(); + } + } + + private void initIndicators() { + mLastSelected = -1; + mIndicatorCount = mRecyclerView.getAdapter().getItemCount(); + createIndicators(mIndicatorSize, mIndicatorMargin); + onPageSelected(0); + } + + private void updateSimpleState(int position) { + if (mLastSelected != -1) { + animateViewScale(getChildAt(mLastSelected), STATE_NORMAL); + } + + animateViewScale(getChildAt(position), STATE_SELECTED); + + mLastSelected = position; + } + + private void updateOverflowState(int position) { + if (mIndicatorCount == 0) { + return; + } + + if (position < 0 || position > mIndicatorCount) { + return; + } + + Transition transition = new TransitionSet() + .setOrdering(TransitionSet.ORDERING_TOGETHER) + .addTransition(new ChangeBounds()) + .addTransition(new Fade()); + + TransitionManager.beginDelayedTransition(this, transition); + + float[] positionStates = new float[mIndicatorCount + 1]; + Arrays.fill(positionStates, STATE_GONE); + + int start = position - MAX_INDICATORS + 4; + int realStart = Math.max(0, start); + + if (realStart + MAX_INDICATORS > mIndicatorCount) { + realStart = mIndicatorCount - MAX_INDICATORS; + positionStates[mIndicatorCount - 1] = STATE_NORMAL; + positionStates[mIndicatorCount - 2] = STATE_NORMAL; + } else { + if (realStart + MAX_INDICATORS - 2 < mIndicatorCount) { + positionStates[realStart + MAX_INDICATORS - 2] = STATE_SMALL; + } + if (realStart + MAX_INDICATORS - 1 < mIndicatorCount) { + positionStates[realStart + MAX_INDICATORS - 1] = STATE_SMALLEST; + } + } + + for (int i = realStart; i < realStart + MAX_INDICATORS - 2; i++) { + positionStates[i] = STATE_NORMAL; + } + + if (position > 5) { + positionStates[realStart] = STATE_SMALLEST; + positionStates[realStart + 1] = STATE_SMALL; + } else if (position == 5) { + positionStates[realStart] = STATE_SMALL; + } + + positionStates[position] = STATE_SELECTED; + + updateIndicators(positionStates); + + mLastSelected = position; + } + + private void updateIndicators(float[] positionStates) { + for (int i = 0; i < mIndicatorCount; i++) { + View v = getChildAt(i); + float state = positionStates[i]; + + if (state == STATE_GONE) { + v.setVisibility(GONE); + + } else { + v.setVisibility(VISIBLE); + animateViewScale(v, state); + } + + } + } + + private void createIndicators(int indicatorSize, int margin) { + removeAllViews(); + + if (mIndicatorCount <= 1) { + return; + } + + for (int i = 0; i < mIndicatorCount; i++) { + addIndicator(mIndicatorCount > MAX_INDICATORS, indicatorSize, margin); + } + } + + private void addIndicator(boolean isOverflowState, int indicatorSize, int margin) { + View view = new View(getContext()); + view.setBackground(getDotDrawable()); + if (isOverflowState) { + animateViewScale(view, STATE_SMALLEST); + } else { + animateViewScale(view, STATE_NORMAL); + } + + MarginLayoutParams params = new MarginLayoutParams(indicatorSize, indicatorSize); + params.leftMargin = margin; + params.rightMargin = margin; + + addView(view, params); + } + + private Drawable getDotDrawable() { + GradientDrawable drawable = new GradientDrawable(); + drawable.setShape(GradientDrawable.OVAL); + drawable.setColor(dotFillColor); + drawable.setStroke(Util.dpToPx(0.5d), dotStrokeColor); + + return drawable; + } + + private void animateViewScale(@Nullable View view, float scale) { + if (view == null) { + return; + } + + view.animate() + .scaleX(scale) + .scaleY(scale); + } } diff --git a/library/src/main/java/cz/intik/overflowindicator/SimpleSnapHelper.java b/library/src/main/java/cz/intik/overflowindicator/SimpleSnapHelper.java index 3af908e..ae93dbd 100644 --- a/library/src/main/java/cz/intik/overflowindicator/SimpleSnapHelper.java +++ b/library/src/main/java/cz/intik/overflowindicator/SimpleSnapHelper.java @@ -1,32 +1,32 @@ package cz.intik.overflowindicator; -import android.support.annotation.NonNull; -import android.support.v7.widget.PagerSnapHelper; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.PagerSnapHelper; +import androidx.recyclerview.widget.RecyclerView; /** * SnapHelper which allows snapping of pages, customized with notifying of {@link OverflowPagerIndicator} * when position is snapped * * @author Petr Introvic - * created 07.10.2017. + * created 07.10.2017. */ public class SimpleSnapHelper extends PagerSnapHelper { - private OverflowPagerIndicator mOverflowPagerIndicator; + private OverflowPagerIndicator mOverflowPagerIndicator; - public SimpleSnapHelper(@NonNull OverflowPagerIndicator overflowPagerIndicator) { - mOverflowPagerIndicator = overflowPagerIndicator; - } + public SimpleSnapHelper(@NonNull OverflowPagerIndicator overflowPagerIndicator) { + mOverflowPagerIndicator = overflowPagerIndicator; + } - @Override - public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) { - int position = super.findTargetSnapPosition(layoutManager, velocityX, velocityY); + @Override + public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) { + int position = super.findTargetSnapPosition(layoutManager, velocityX, velocityY); - // Notify OverflowPagerIndicator about changed page - mOverflowPagerIndicator.onPageSelected(position); + // Notify OverflowPagerIndicator about changed page + mOverflowPagerIndicator.onPageSelected(position); - return position; - } + return position; + } } diff --git a/library/src/main/java/cz/intik/overflowindicator/Util.java b/library/src/main/java/cz/intik/overflowindicator/Util.java new file mode 100644 index 0000000..e225c50 --- /dev/null +++ b/library/src/main/java/cz/intik/overflowindicator/Util.java @@ -0,0 +1,9 @@ +package cz.intik.overflowindicator; + +import android.content.res.Resources; + +class Util { + static int dpToPx(double dp) { + return (int) (dp * Resources.getSystem().getDisplayMetrics().density); + } +} diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml new file mode 100644 index 0000000..9eb1928 --- /dev/null +++ b/library/src/main/res/values/attrs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/library/src/main/res/values/colors.xml b/library/src/main/res/values/colors.xml index 1deafa1..98561dc 100644 --- a/library/src/main/res/values/colors.xml +++ b/library/src/main/res/values/colors.xml @@ -1,8 +1,5 @@ - #EEFFFFFF - #99CCCCCC - \ No newline at end of file diff --git a/sample-app/build.gradle b/sample-app/build.gradle index 4c75b9c..fba9e78 100644 --- a/sample-app/build.gradle +++ b/sample-app/build.gradle @@ -1,15 +1,16 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 26 - buildToolsVersion "26.0.1" + compileSdkVersion 28 + defaultConfig { applicationId "cz.intik.overflowpagerindicator" minSdkVersion 21 - targetSdkVersion 26 + targetSdkVersion 28 versionCode 1 versionName "1.0" } + buildTypes { release { minifyEnabled false @@ -19,8 +20,8 @@ android { } dependencies { - compile "com.android.support:appcompat-v7:$rootProject.supportLibraryVersion" - compile "com.android.support:recyclerview-v7:$rootProject.supportLibraryVersion" + implementation "androidx.appcompat:appcompat:1.0.0" + implementation "androidx.recyclerview:recyclerview:1.0.0" - compile project(path: ':library') + implementation project(path: ':library') } diff --git a/sample-app/src/main/AndroidManifest.xml b/sample-app/src/main/AndroidManifest.xml index de24c1f..3171318 100644 --- a/sample-app/src/main/AndroidManifest.xml +++ b/sample-app/src/main/AndroidManifest.xml @@ -1,23 +1,23 @@ + package="cz.intik.overflowpagerindicator"> - + - - - + + + - - - + + + - + \ No newline at end of file diff --git a/sample-app/src/main/java/cz/intik/overflowpagerindicator/MainActivity.java b/sample-app/src/main/java/cz/intik/overflowpagerindicator/MainActivity.java index 80568bb..153898e 100644 --- a/sample-app/src/main/java/cz/intik/overflowpagerindicator/MainActivity.java +++ b/sample-app/src/main/java/cz/intik/overflowpagerindicator/MainActivity.java @@ -2,82 +2,82 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.view.ViewGroup; import android.widget.FrameLayout; +import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import cz.intik.overflowindicator.OverflowPagerIndicator; import cz.intik.overflowindicator.SimpleSnapHelper; /** * @author Petr Introvic - * created 03.10.2017. + * created 03.10.2017. */ public class MainActivity extends AppCompatActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); - initRecyclerWithIndicator(R.id.recycler_view, R.id.view_pager_indicator, 20, 1000); - initRecyclerWithIndicator(R.id.recycler_view_simple, R.id.view_pager_indicator_simple, 5, 1000); - } + initRecyclerWithIndicator(R.id.recycler_view, R.id.view_pager_indicator, 20, 1000); + initRecyclerWithIndicator(R.id.recycler_view_simple, R.id.view_pager_indicator_simple, 5, 1000); + } - private void initRecyclerWithIndicator(int recyclerViewId, int indicatorViewId, final int itemCount, int delay) { - RecyclerView recyclerView = findViewById(recyclerViewId); - final OverflowPagerIndicator overflowPagerIndicator = findViewById(indicatorViewId); - final Adapter adapter = new Adapter(); + private void initRecyclerWithIndicator(int recyclerViewId, int indicatorViewId, final int itemCount, int delay) { + RecyclerView recyclerView = findViewById(recyclerViewId); + final OverflowPagerIndicator overflowPagerIndicator = findViewById(indicatorViewId); + final Adapter adapter = new Adapter(); - recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); - recyclerView.setAdapter(adapter); + recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); + recyclerView.setAdapter(adapter); - overflowPagerIndicator.attachToRecyclerView(recyclerView); + overflowPagerIndicator.attachToRecyclerView(recyclerView); - new SimpleSnapHelper(overflowPagerIndicator).attachToRecyclerView(recyclerView); + new SimpleSnapHelper(overflowPagerIndicator).attachToRecyclerView(recyclerView); - recyclerView.postDelayed(new Runnable() { - @Override - public void run() { - adapter.updateItemCount(itemCount); - } - }, delay); - } + recyclerView.postDelayed(new Runnable() { + @Override + public void run() { + adapter.updateItemCount(itemCount); + } + }, delay); + } - private static class Adapter extends RecyclerView.Adapter { - // Some material colors for recycler view items background - private String[] colors = new String[]{"#2196F3", "#00BCD4", "#4CAF50", "#CDDC39", "#FFC107", "#FF5722"}; - private int itemCount = 0; + private static class Adapter extends RecyclerView.Adapter { + // Some material colors for recycler view items background + private String[] colors = new String[]{"#2196F3", "#00BCD4", "#4CAF50", "#CDDC39", "#FFC107", "#FF5722"}; + private int itemCount = 0; - @Override - public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - FrameLayout view = new FrameLayout(parent.getContext()); - view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + FrameLayout view = new FrameLayout(parent.getContext()); + view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); - return new RecyclerView.ViewHolder(view) { - }; - } + return new RecyclerView.ViewHolder(view) { + }; + } - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - int color = Color.parseColor(colors[position % colors.length]); + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + int color = Color.parseColor(colors[position % colors.length]); - holder.itemView.setBackgroundColor(color); - } + holder.itemView.setBackgroundColor(color); + } - @Override - public int getItemCount() { - return itemCount; - } + @Override + public int getItemCount() { + return itemCount; + } - void updateItemCount(int newCount) { - itemCount = newCount; + void updateItemCount(int newCount) { + itemCount = newCount; - notifyDataSetChanged(); - } - } + notifyDataSetChanged(); + } + } } diff --git a/sample-app/src/main/res/layout/activity_main.xml b/sample-app/src/main/res/layout/activity_main.xml index 6039f5b..fbb91db 100644 --- a/sample-app/src/main/res/layout/activity_main.xml +++ b/sample-app/src/main/res/layout/activity_main.xml @@ -1,51 +1,46 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample-app/src/main/res/values/colors.xml b/sample-app/src/main/res/values/colors.xml index 9865995..3ab3e9c 100644 --- a/sample-app/src/main/res/values/colors.xml +++ b/sample-app/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ - #3F51B5 - #303F9F - #FF4081 + #3F51B5 + #303F9F + #FF4081 diff --git a/sample-app/src/main/res/values/strings.xml b/sample-app/src/main/res/values/strings.xml index 6dfc3e3..e31836d 100644 --- a/sample-app/src/main/res/values/strings.xml +++ b/sample-app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - Overflow Pager Indicator - sample app + Overflow Pager Indicator - Sample app diff --git a/sample-app/src/main/res/values/styles.xml b/sample-app/src/main/res/values/styles.xml index 79a66e2..93c34e5 100644 --- a/sample-app/src/main/res/values/styles.xml +++ b/sample-app/src/main/res/values/styles.xml @@ -1,11 +1,7 @@ - - - - +