我写了一个小片段,在RecyclerView的每个项目中显示一条垂直线和一个小球。 但是最后一个或只有一个项目时,永远不会被绘制。ItemDecoration没有在最后一个单元上绘制
我的装饰:
public class MarkerDecoration extends RecyclerView.ItemDecoration {
Paint paint;
public MarkerDecoration() {
paint = new Paint();
paint.setColor(Color.parseColor("#cccccc"));
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++) {
View v = parent.getChildAt(i);
c.save();
if (childCount > 1) {
if (i == 0)
c.drawLine(v.getX() + v.getPaddingLeft(), v.getHeight()/2 - v.getY(), v.getX() + v.getPaddingLeft(), v.getHeight(), paint);
else if (i == childCount - 1)
c.drawLine(v.getX() + v.getPaddingLeft(), v.getY(), v.getX() + v.getPaddingLeft(), v.getY() - v.getHeight()/2, paint);
else
c.drawLine(v.getX() + v.getPaddingLeft(), v.getY(), v.getX() + v.getPaddingLeft(), v.getHeight() + v.getY(), paint);
}
c.drawCircle(v.getX() + v.getPaddingLeft(), v.getY() - v.getHeight()/2, 8, paint);
c.restore();
}
}
}
并且布局是越来越呼吁:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="32dp"
android:paddingEnd="@dimen/line_item_paddings"
android:paddingLeft="@dimen/line_item_text_padding"
android:paddingRight="@dimen/line_item_paddings">
<TextView
android:id="@+id/post_date_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerInParent="true"
android:paddingEnd="@dimen/line_item_text_padding"
android:paddingLeft="@dimen/line_item_text_padding"
android:paddingRight="@dimen/line_item_text_padding"
android:paddingStart="@dimen/line_item_text_padding"
android:text="3 JUL"
android:textColor="@color/light_gray" />
<TextView
android:id="@+id/title_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_toEndOf="@+id/post_date_row"
android:layout_toLeftOf="@+id/amount_row"
android:layout_toRightOf="@+id/post_date_row"
android:layout_toStartOf="@+id/amount_row"
android:ellipsize="end"
android:maxLines="1"
android:paddingEnd="@dimen/line_item_text_padding"
android:paddingLeft="@dimen/line_item_text_padding"
android:paddingRight="@dimen/line_item_text_padding"
android:text="GTX Telecom" />
<TextView
android:id="@+id/amount_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:paddingEnd="@dimen/line_item_text_padding"
android:paddingLeft="@dimen/line_item_text_padding"
android:paddingRight="@dimen/line_item_text_padding"
android:text="54,00" />
</RelativeLayout>
我是缺少在这里?
谢谢!
感谢aswering。 'childCount> 1'是正确的。它发生在列表只有1个项目时,因此,我只需要显示该圆圈,根本不需要线条。 – Leonardo
你提到的那一行正在执行,我只是不知道它为什么不能正确绘图,我不知道它是否是一个误判问题......再次感谢 – Leonardo
我也解决了你的第二个问题,你传递给drawline'v.getY() - v.getHeight()/ 2'的第二个到最后一个参数,你本质上是从视图的左上角开始绘制一条直线,并在视图上方的某个位置结束它(关于' v.getY() - v.getHeight()/ 2'),只需改变它为'v.getY()+ v.getHeight()/ 2'而不是 – Bhargav