Java tutorial
/* == 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; } }