/* * Copyright (C) 2014 jonas.oreland@gmail.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.runnerup.widget; import android.annotation.TargetApi; import android.graphics.Point; import android.os.Build; import android.support.wearable.view.GridPagerAdapter; import android.support.wearable.view.GridViewPager; import android.util.TypedValue; import android.view.Gravity; import android.widget.Button; import android.widget.LinearLayout; import org.runnerup.R; /** * Created by jonas on 12/27/14. */ @TargetApi(Build.VERSION_CODES.KITKAT_WATCH) public class MyDotsPageIndicator implements GridViewPager.OnPageChangeListener, GridViewPager.OnAdapterChangeListener { // margin, size private Point unselected = new Point(4,2); private Point selected = new Point(6,1); private LinearLayout layout; private GridViewPager pager; public MyDotsPageIndicator(LinearLayout layout) { this.layout = layout; } public void setPager(GridViewPager pager) { this.pager = pager; this.onDataSetChanged(); this.onPageSelected(0, 0); } @Override public void onPageScrolled(int i, int i2, float v, float v2, int i3, int i4) { } @Override public void onPageSelected(int row, int col) { for (int i = 0; i < layout.getChildCount(); i++) configDot((Button) layout.getChildAt(i), false); if (row < layout.getChildCount()) configDot((Button) layout.getChildAt(row), true); } @Override public void onPageScrollStateChanged(int i) { } @Override public void onAdapterChanged(GridPagerAdapter gridPagerAdapter, GridPagerAdapter gridPagerAdapter2) { } @Override public void onDataSetChanged() { layout.removeAllViews(); /* skip dot for only 1 row */ if (pager.getAdapter().getRowCount() <= 1) return; for (int i = 0; i < pager.getAdapter().getRowCount(); i++) { Button b = new Button(layout.getContext()); layout.addView(configDot(b, false)); } } private Button configDot(Button btn, boolean selected) { btn.setBackgroundResource(R.drawable.dot); Point measures = selected ? this.selected : this.unselected; int size = getPxFromDp(measures.x); int margin = getPxFromDp(measures.y); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(size, size); if (layout.getOrientation() == LinearLayout.VERTICAL) { p.gravity = Gravity.CENTER_HORIZONTAL; p.setMargins(0, margin, 0, margin); } else { p.gravity = Gravity.CENTER_VERTICAL; p.setMargins(margin, 0, margin, 0); } btn.setLayoutParams(p); return btn; } private int getPxFromDp(int dp){ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, layout.getResources().getDisplayMetrics()); } }