org.runbuddy.tomahawk.views.SimplePagerTabs.java Source code

Java tutorial

Introduction

Here is the source code for org.runbuddy.tomahawk.views.SimplePagerTabs.java

Source

/* == This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
 *
 *   Copyright 2015, Enno Gottschalk <mrmaffen@googlemail.com>
 *
 *   Tomahawk 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.
 *
 *   Tomahawk 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 Tomahawk. If not, see <http://www.gnu.org/licenses/>.
 */
package org.runbuddy.tomahawk.views;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.animation.ValueAnimator;

import org.runbuddy.libtomahawk.utils.ViewUtils;
import org.runbuddy.tomahawk.R;

public class SimplePagerTabs extends FrameLayout {

    private ViewPager.OnPageChangeListener mForwardOnPageChangeListener;

    private ValueAnimator mAnimator;

    private int mItemCount;

    private ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (mAnimator != null) {
                int stepSize = 10000 / (mItemCount - 1);
                mAnimator.setCurrentPlayTime((long) (position * stepSize + positionOffset * stepSize));
            }
            mForwardOnPageChangeListener.onPageScrolled(position, positionOffset, positionOffsetPixels);
        }

        @Override
        public void onPageSelected(int position) {
            mForwardOnPageChangeListener.onPageSelected(position);
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            mForwardOnPageChangeListener.onPageScrollStateChanged(state);
        }
    };

    public SimplePagerTabs(Context context) {
        super(context);
    }

    public SimplePagerTabs(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setViewPager(final ViewPager viewPager) {
        removeAllViews();
        viewPager.addOnPageChangeListener(mOnPageChangeListener);
        LinearLayout itemContainer = new LinearLayout(getContext());
        addView(itemContainer);
        mItemCount = viewPager.getAdapter().getCount();
        for (int i = 0; i < viewPager.getAdapter().getCount(); i++) {
            if (i > 0) {
                View divider = LayoutInflater.from(getContext()).inflate(R.layout.simplepagertabs_tab_divider,
                        itemContainer, false);
                itemContainer.addView(divider);
            }
            TextView item = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.simplepagertabs_tab_item,
                    itemContainer, false);
            item.setText(viewPager.getAdapter().getPageTitle(i));
            itemContainer.addView(item);
            if (i == 0) {
                ViewUtils.afterViewGlobalLayout(new ViewUtils.ViewRunnable(item) {
                    @Override
                    public void run() {
                        View tabIndicator = LayoutInflater.from(getContext())
                                .inflate(R.layout.simplepagertabs_tab_indicator, SimplePagerTabs.this, false);
                        tabIndicator.getLayoutParams().width = getLayedOutView().getWidth();
                        addView(tabIndicator);
                        int xGoal = (mItemCount - 1) * (getLayedOutView().getWidth() + 1) - 1;
                        mAnimator = ObjectAnimator.ofFloat(tabIndicator, "x", 0, xGoal);
                        mAnimator.setInterpolator(new LinearInterpolator());
                        mAnimator.setDuration(10000);
                    }
                });
            }

            final int j = i;
            item.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    viewPager.setCurrentItem(j);
                }
            });
        }
    }

    public void setOnPageChangeListener(ViewPager.OnPageChangeListener onPageChangeListener) {
        mForwardOnPageChangeListener = onPageChangeListener;
    }

}