package com.example.administrator.cookman.ui.component.magicindicator.buildins.commonnavigator.indicators;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.view.View;
import android.view.animation.Interpolator;
import android.view.animation.LinearInterpolator;
import com.example.administrator.cookman.ui.component.magicindicator.buildins.UIUtil;
import com.example.administrator.cookman.ui.component.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import com.example.administrator.cookman.ui.component.magicindicator.buildins.commonnavigator.model.PositionData;
import java.util.List;
/**
* 带有小尖角的直线指示器
* 博客: http://hackware.lucode.net
* Created by hackware on 2016/6/26.
*/
public class TriangularPagerIndicator extends View implements IPagerIndicator {
private List<PositionData> mPositionDataList;
private Paint mPaint;
private int mLineHeight;
private int mLineColor;
private int mTriangleHeight;
private int mTriangleWidth;
private Path mPath = new Path();
private Interpolator mStartInterpolator = new LinearInterpolator();
private float mAnchorX;
public TriangularPagerIndicator(Context context) {
super(context);
init(context);
}
private void init(Context context) {
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setStyle(Paint.Style.FILL);
mLineHeight = UIUtil.dip2px(context, 3);
mTriangleWidth = UIUtil.dip2px(context, 14);
mTriangleHeight = UIUtil.dip2px(context, 8);
}
@Override
protected void onDraw(Canvas canvas) {
mPaint.setColor(mLineColor);
canvas.drawRect(0, getHeight() - mLineHeight, getWidth(), getHeight(), mPaint);
mPath.reset();
mPath.moveTo(mAnchorX - mTriangleWidth / 2, getHeight());
mPath.lineTo(mAnchorX, getHeight() - mTriangleHeight);
mPath.lineTo(mAnchorX + mTriangleWidth / 2, getHeight());
mPath.close();
canvas.drawPath(mPath, mPaint);
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (mPositionDataList == null || mPositionDataList.isEmpty()) {
return;
}
// 计算锚点位置
int currentPosition = Math.min(mPositionDataList.size() - 1, position);
int nextPosition = Math.min(mPositionDataList.size() - 1, position + 1);
PositionData current = mPositionDataList.get(currentPosition);
PositionData next = mPositionDataList.get(nextPosition);
float leftX = current.mLeft + (current.mRight - current.mLeft) / 2;
float rightX = next.mLeft + (next.mRight - next.mLeft) / 2;
mAnchorX = leftX + (rightX - leftX) * mStartInterpolator.getInterpolation(positionOffset);
invalidate();
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPositionDataProvide(List<PositionData> dataList) {
mPositionDataList = dataList;
}
public int getLineHeight() {
return mLineHeight;
}
public void setLineHeight(int lineHeight) {
mLineHeight = lineHeight;
}
public int getLineColor() {
return mLineColor;
}
public void setLineColor(int lineColor) {
mLineColor = lineColor;
}
public int getTriangleHeight() {
return mTriangleHeight;
}
public void setTriangleHeight(int triangleHeight) {
mTriangleHeight = triangleHeight;
}
public int getTriangleWidth() {
return mTriangleWidth;
}
public void setTriangleWidth(int triangleWidth) {
mTriangleWidth = triangleWidth;
}
public Interpolator getStartInterpolator() {
return mStartInterpolator;
}
public void setStartInterpolator(Interpolator startInterpolator) {
mStartInterpolator = startInterpolator;
if (mStartInterpolator == null) {
mStartInterpolator = new LinearInterpolator();
}
}
}