diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java deleted file mode 100644 index 91b5fc8..0000000 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.casic.app.smartwell.utils; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Rect; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.app.smartwell.R; -import com.pengxh.app.multilib.utils.SizeUtil; - -public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { - - private final Context context; - private final Paint circlePaint, linePaint; - private final int radius; - - public TimeLineItemDecoration(Context context) { - this.context = context; - circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); - - linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); - linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); - - radius = SizeUtil.dp2px(context, 8); - } - - @Override - public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { - super.getItemOffsets(outRect, view, parent, state); - outRect.left = SizeUtil.dp2px(context, 20); - } - - @Override - public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { - super.onDraw(canvas, parent, state); - int childCount = parent.getChildCount(); - RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); - for (int i = 0; i < childCount; i++) { - View childView = parent.getChildAt(i); - int childViewHeight = childView.getHeight(); - int itemCount = parent.getAdapter().getItemCount(); - int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); - int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); - - float startX = leftDecorationWidth >> 1; - // 圆顶部部分竖线,起点 Y - float topStartY = childView.getTop() - topDecorationHeight; - // 圆顶部部分竖线,终点 Y - float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; - - // 圆底部部分竖线,起点 Y - float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; - // 圆底部部分竖线,终点 Y - float bottomStopY = childView.getBottom(); - - // 获取当前 item 是 recyclerview 的第几个 childView - int childPosition = parent.getChildLayoutPosition(childView); - - // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.setStyle(Paint.Style.FILL); - } else { - circlePaint.setStyle(Paint.Style.STROKE); - circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); - } - canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); - - // 绘制竖线 - // 第 0 位置上只需绘制下半部分 - if (childPosition == 0) { - canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); - // 最后位置只需绘制上半部分 - } else if (childPosition == parent.getAdapter().getItemCount() - 1) { - canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); - } else { - // 都要绘制 - canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); - // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 - canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); - } - } - } -} diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java deleted file mode 100644 index 91b5fc8..0000000 --- a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.casic.app.smartwell.utils; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Rect; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.casic.app.smartwell.R; -import com.pengxh.app.multilib.utils.SizeUtil; - -public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { - - private final Context context; - private final Paint circlePaint, linePaint; - private final int radius; - - public TimeLineItemDecoration(Context context) { - this.context = context; - circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); - - linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); - linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); - linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); - - radius = SizeUtil.dp2px(context, 8); - } - - @Override - public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { - super.getItemOffsets(outRect, view, parent, state); - outRect.left = SizeUtil.dp2px(context, 20); - } - - @Override - public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { - super.onDraw(canvas, parent, state); - int childCount = parent.getChildCount(); - RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); - for (int i = 0; i < childCount; i++) { - View childView = parent.getChildAt(i); - int childViewHeight = childView.getHeight(); - int itemCount = parent.getAdapter().getItemCount(); - int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); - int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); - - float startX = leftDecorationWidth >> 1; - // 圆顶部部分竖线,起点 Y - float topStartY = childView.getTop() - topDecorationHeight; - // 圆顶部部分竖线,终点 Y - float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; - - // 圆底部部分竖线,起点 Y - float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; - // 圆底部部分竖线,终点 Y - float bottomStopY = childView.getBottom(); - - // 获取当前 item 是 recyclerview 的第几个 childView - int childPosition = parent.getChildLayoutPosition(childView); - - // 绘制圆 - if (childPosition == 0 || childPosition == itemCount - 1) { - circlePaint.setStyle(Paint.Style.FILL); - } else { - circlePaint.setStyle(Paint.Style.STROKE); - circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); - } - canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); - - // 绘制竖线 - // 第 0 位置上只需绘制下半部分 - if (childPosition == 0) { - canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); - // 最后位置只需绘制上半部分 - } else if (childPosition == parent.getAdapter().getItemCount() - 1) { - canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); - } else { - // 都要绘制 - canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); - // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 - canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); - } - } - } -} diff --git a/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt new file mode 100644 index 0000000..91b5fc8 --- /dev/null +++ b/app/src/main/java/com/casic/app/smartwell/utils/TimeLineItemDecoration.kt @@ -0,0 +1,89 @@ +package com.casic.app.smartwell.utils; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.casic.app.smartwell.R; +import com.pengxh.app.multilib.utils.SizeUtil; + +public class TimeLineItemDecoration extends RecyclerView.ItemDecoration { + + private final Context context; + private final Paint circlePaint, linePaint; + private final int radius; + + public TimeLineItemDecoration(Context context) { + this.context = context; + circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + circlePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + + linePaint = new Paint(Paint.ANTI_ALIAS_FLAG); + linePaint.setColor(context.getResources().getColor(R.color.mainThemeColor)); + linePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + + radius = SizeUtil.dp2px(context, 8); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = SizeUtil.dp2px(context, 20); + } + + @Override + public void onDraw(@NonNull Canvas canvas, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.onDraw(canvas, parent, state); + int childCount = parent.getChildCount(); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + for (int i = 0; i < childCount; i++) { + View childView = parent.getChildAt(i); + int childViewHeight = childView.getHeight(); + int itemCount = parent.getAdapter().getItemCount(); + int leftDecorationWidth = layoutManager.getLeftDecorationWidth(childView); + int topDecorationHeight = layoutManager.getTopDecorationHeight(childView); + + float startX = leftDecorationWidth >> 1; + // 圆顶部部分竖线,起点 Y + float topStartY = childView.getTop() - topDecorationHeight; + // 圆顶部部分竖线,终点 Y + float topStopY = childView.getTop() + (childViewHeight >> 1) - radius; + + // 圆底部部分竖线,起点 Y + float bottomStartY = childView.getTop() + (childViewHeight >> 1) + radius; + // 圆底部部分竖线,终点 Y + float bottomStopY = childView.getBottom(); + + // 获取当前 item 是 recyclerview 的第几个 childView + int childPosition = parent.getChildLayoutPosition(childView); + + // 绘制圆 + if (childPosition == 0 || childPosition == itemCount - 1) { + circlePaint.setStyle(Paint.Style.FILL); + } else { + circlePaint.setStyle(Paint.Style.STROKE); + circlePaint.setStrokeWidth(SizeUtil.dp2px(context, 2)); + } + canvas.drawCircle(startX, childView.getTop() + (childViewHeight >> 1), radius, circlePaint); + + // 绘制竖线 + // 第 0 位置上只需绘制下半部分 + if (childPosition == 0) { + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + // 最后位置只需绘制上半部分 + } else if (childPosition == parent.getAdapter().getItemCount() - 1) { + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + } else { + // 都要绘制 + canvas.drawLine(startX, topStartY, startX, topStopY, linePaint); + // 当前 item position = curPosition 时,绘制下半部分竖线时,颜色设置为浅色 + canvas.drawLine(startX, bottomStartY, startX, bottomStopY, linePaint); + } + } + } +}