package com.mingle.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Canvas;
import android.os.Build;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Interpolator;
import android.widget.LinearLayout;
import com.mingle.sweetsheet.R;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.view.ViewHelper;
import java.util.ArrayList;
import java.util.List;
/**
* @author zzz40500
* @version 1.0
* @date 2015/8/5.
* @github: https://github.com/zzz40500
*
*/
public class IndicatorView extends LinearLayout implements ViewPager.OnPageChangeListener,CircleRevealHelper.CircleRevealEnable {
private ViewPager mViewPager;
private int mPreSelectPosition=-1;
private List<View> mIndicators = new ArrayList<>();
private CircleRevealHelper mCircleRevealHelper;
public IndicatorView(Context context) {
super(context);
init();
}
public IndicatorView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public IndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public IndicatorView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
setOrientation(LinearLayout.HORIZONTAL);
mCircleRevealHelper=new CircleRevealHelper(this);
}
public void setViewPager(ViewPager viewPager) {
if (viewPager.getAdapter() == null) {
throw new IllegalStateException("ViewPager does not have adapter instance.");
}
mViewPager = viewPager;
mViewPager.addOnPageChangeListener(this);
initIndicatorView();
}
private void initIndicatorView() {
this.removeAllViews();
mIndicators.clear();
int count = mViewPager.getAdapter().getCount();
for (int i = 0; i < count; i++) {
addIndicationView();
}
setSelect(mViewPager.getCurrentItem());
}
private void setSelect(int i) {
View view = mIndicators.get(i);
view.setSelected(true);
if(mPreSelectPosition != -1){
mIndicators.get(mPreSelectPosition).
setSelected(false);
}
mPreSelectPosition=i;
}
private void addIndicationView() {
View indicatorView = new View(getContext());
indicatorView.setBackgroundResource(R.drawable.indicator);
int width = getResources().getDimensionPixelSize(R.dimen.indicator_width);
int height = getResources().getDimensionPixelSize(R.dimen.indicator_height);
int padding = getResources().getDimensionPixelSize(R.dimen.indicator_padding);
LayoutParams layoutParams = new LayoutParams(width, height);
layoutParams.leftMargin = padding;
layoutParams.rightMargin = padding;
this.addView(indicatorView, layoutParams);
mIndicators.add(indicatorView);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setSelect( position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
public void alphaShow(boolean isAnimation){
if(isAnimation) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "alpha", 0, 1);
objectAnimator.setDuration(300);
objectAnimator.start();
}else{
ViewHelper.setAlpha(this,1);
}
}
public void alphaDismiss(boolean isAnimation){
if(isAnimation) {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(this, "alpha", 1, 0);
objectAnimator.setDuration(300);
objectAnimator.start();
}else{
ViewHelper.setAlpha(this,0);
}
}
@Override
protected void onDraw(Canvas canvas) {
mCircleRevealHelper.onDraw(canvas);
}
@Override
public void superOnDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
public void circularReveal(int centerX, int centerY, float startRadius, float endRadius, long duration, Interpolator interpolator) {
mCircleRevealHelper.circularReveal(centerX,centerY,startRadius,endRadius,duration,interpolator);
}
@Override
public void circularReveal(int centerX, int centerY, float startRadius, float endRadius) {
mCircleRevealHelper.circularReveal(centerX,centerY,startRadius,endRadius);
}
}