package com.duckduckgo.mobile.android.views.pageindicator; import android.annotation.TargetApi; import android.content.Context; import android.graphics.drawable.GradientDrawable; import android.support.annotation.ColorInt; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.Gravity; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import com.duckduckgo.mobile.android.R; import com.duckduckgo.mobile.android.util.DimenUtils; /** * Created by fgei on 4/6/17. */ public class BannerOnboardingPageIndicator extends LinearLayout { private static final int SELECTED_COLOR = R.color.mini_page_indicator_selected; private static final int UNSELECTED_COLOR = R.color.mini_page_indicator_unselected; private ViewPager viewPager; private int numIndicator = 0; private int positionSelected = 0; public BannerOnboardingPageIndicator(Context context) { super(context); } public BannerOnboardingPageIndicator(Context context, AttributeSet attrs) { super(context, attrs); } @TargetApi(11) public BannerOnboardingPageIndicator(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @TargetApi(21) public BannerOnboardingPageIndicator(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public void setViewPager(ViewPager viewPager) { setGravity(Gravity.CENTER_VERTICAL); this.viewPager = viewPager; setNumIndicator(viewPager.getAdapter().getCount()); this.viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { setPositionSelected(i); } @Override public void onPageScrollStateChanged(int i) { } }); setPositionSelected(0); } private void setPositionSelected(int position) { for(int i=0; i < getChildCount(); i++) { ImageView child = (ImageView) getChildAt(i); child.setImageDrawable(i == position ? new SelectedIndicator() : new UnselectedIndicator()); } } @ColorInt private int getSelectedColor() { return ContextCompat.getColor(getContext(), SELECTED_COLOR); } @ColorInt private int getUnselectedColor() { return ContextCompat.getColor(getContext(), UNSELECTED_COLOR); } private void setNumIndicator(int numIndicator) { this.numIndicator = numIndicator; LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setMargins((int)DimenUtils.convertDpToPixel(9, getContext()), 0, 0, 0); LayoutParams startParam = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); startParam.setMargins(0, 0, 0, 0); for(int i=0; i<numIndicator; i++) { ImageView imageView = new ImageView(getContext()); imageView.setLayoutParams(i==0 ? startParam : params); imageView.setImageDrawable(new UnselectedIndicator()); addView(imageView); } } private class SelectedIndicator extends GradientDrawable { public SelectedIndicator() { setShape(OVAL); setColor(getSelectedColor()); setSize((int) DimenUtils.convertDpToPixel(8, getContext()), (int) DimenUtils.convertDpToPixel(8, getContext())); } } private class UnselectedIndicator extends GradientDrawable { public UnselectedIndicator() { setShape(OVAL); setColor(getUnselectedColor()); setSize((int) DimenUtils.convertDpToPixel(6, getContext()), (int) DimenUtils.convertDpToPixel(6, getContext())); } } }