package com.example.administrator.cookman.ui.component.magicindicator.buildins.commonnavigator.indicators; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.view.View; 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; /** * 用于测试的指示器,可用来检测自定义的IMeasurablePagerTitleView是否正确测量内容区域 * 博客: http://hackware.lucode.net * Created by hackware on 2016/6/26. */ public class TestPagerIndicator extends View implements IPagerIndicator { private Paint mPaint; private int mOutRectColor; private int mInnerRectColor; private RectF mOutRect = new RectF(); private RectF mInnerRect = new RectF(); private List<PositionData> mPositionDataList; public TestPagerIndicator(Context context) { super(context); init(context); } private void init(Context context) { mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setStyle(Paint.Style.STROKE); mOutRectColor = Color.RED; mInnerRectColor = Color.GREEN; } @Override protected void onDraw(Canvas canvas) { mPaint.setColor(mOutRectColor); canvas.drawRect(mOutRect, mPaint); mPaint.setColor(mInnerRectColor); canvas.drawRect(mInnerRect, 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); mOutRect.left = current.mLeft + (next.mLeft - current.mLeft) * positionOffset; mOutRect.top = current.mTop + (next.mTop - current.mTop) * positionOffset; mOutRect.right = current.mRight + (next.mRight - current.mRight) * positionOffset; mOutRect.bottom = current.mBottom + (next.mBottom - current.mBottom) * positionOffset; mInnerRect.left = current.mContentLeft + (next.mContentLeft - current.mContentLeft) * positionOffset; mInnerRect.top = current.mContentTop + (next.mContentTop - current.mContentTop) * positionOffset; mInnerRect.right = current.mContentRight + (next.mContentRight - current.mContentRight) * positionOffset; mInnerRect.bottom = current.mContentBottom + (next.mContentBottom - current.mContentBottom) * 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 getOutRectColor() { return mOutRectColor; } public void setOutRectColor(int outRectColor) { mOutRectColor = outRectColor; } public int getInnerRectColor() { return mInnerRectColor; } public void setInnerRectColor(int innerRectColor) { mInnerRectColor = innerRectColor; } }