diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/adapter/MainIndicatorAdapter.java b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/MainIndicatorAdapter.java index 9b2ea085e..67c6e1010 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/adapter/MainIndicatorAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/adapter/MainIndicatorAdapter.java @@ -1,21 +1,21 @@ package com.yizhuan.erban.ui.user.adapter; import android.content.Context; -import android.view.Gravity; -import android.view.ViewGroup; -import android.widget.FrameLayout; +import android.graphics.Canvas; +import android.graphics.LinearGradient; import android.widget.TextView; import androidx.core.content.ContextCompat; import com.yizhuan.erban.R; import com.yizhuan.erban.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView; +import com.yizhuan.erban.ui.widget.magicindicator.FragmentContainerHelper; import com.yizhuan.erban.ui.widget.magicindicator.buildins.UIUtil; import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter; import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator; import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView; import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.indicators.GradientLinePagerIndicator; -import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator; +import com.yizhuan.erban.ui.widget.magicindicator.buildins.commonnavigator.model.PositionData; import java.util.List; @@ -60,14 +60,60 @@ public class MainIndicatorAdapter extends CommonNavigatorAdapter { @Override public IPagerIndicator getIndicator(Context context) { if (!showIndicator) return null; - GradientLinePagerIndicator indicator = new GradientLinePagerIndicator(context); - indicator.setMode(LinePagerIndicator.MODE_WRAP_CONTENT); - indicator.setLineHeight(UIUtil.dip2px(mContext, 8)); - indicator.setRoundRadius(UIUtil.dip2px(mContext, 5)); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - lp.gravity = Gravity.END; - lp.bottomMargin = UIUtil.dip2px(mContext, 0); - indicator.setLayoutParams(lp); + + int startColor = ContextCompat.getColor(context, R.color.color_5CF1FF); + int endColor = ContextCompat.getColor(context, R.color.color_CF70FF); + GradientLinePagerIndicator indicator = new GradientLinePagerIndicator(context) { + + private List mDataList; + + @Override + public void onPositionDataProvide(List dataList) { + mDataList = dataList; + super.onPositionDataProvide(mDataList); + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + if (mDataList == null || mDataList.isEmpty()) { + return; + } + + // 计算锚点位置 + PositionData current = FragmentContainerHelper.getImitativePositionData(mDataList, position); + PositionData next = FragmentContainerHelper.getImitativePositionData(mDataList, position + 1); + + float leftX; + float nextLeftX; + float rightX; + float nextRightX; + + leftX = current.mContentRight - getLineWidth(); + rightX = current.mContentRight; + nextLeftX = next.mContentRight - getLineWidth(); + nextRightX = next.mContentRight; + + getLineRect().left = leftX + (nextLeftX - leftX) * positionOffset; + getLineRect().right = rightX + (nextRightX - rightX) * positionOffset; + getLineRect().top = getHeight() - getLineHeight() - getYOffset(); + getLineRect().bottom = getHeight() - getYOffset(); + + LinearGradient lg = new LinearGradient(getLineRect().left, getLineRect().top, getLineRect().right, getLineRect().bottom, + new int[]{startColor, endColor}, null, LinearGradient.TileMode.CLAMP); + getPaint().setShader(lg); + + invalidate(); + } + + @Override + protected void onDraw(Canvas canvas) { + canvas.drawRoundRect(getLineRect(), getRoundRadius(), getRoundRadius(), getPaint()); + } + }; + + indicator.setLineHeight(context.getResources().getDimensionPixelOffset(R.dimen.dp_8)); + indicator.setLineWidth(context.getResources().getDimensionPixelOffset(R.dimen.dp_35)); + indicator.setRoundRadius(context.getResources().getDimensionPixelOffset(R.dimen.dp_5)); return indicator; } diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index cc962f290..82cae8c73 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -693,5 +693,7 @@ #A3A0AD #FF80CC #6BB3FF + #5CF1FF + #CF70FF