在ListView行之间绘制线条

时间:2012-11-07 13:23:27

标签: android listview override

我在行中使用带有ImageView的ListView。

我需要在这些ImageView之间绘制线条。

因此,一行在ImageView位置的第一行开始,在ImageView位置的第二行结束。等等。

绘制这些线条的最佳方法是什么?

谢谢。

更新。对不起,我无法上传图片而且英语说得不太好。

它不是行之间的水平分隔符。如果要简化它:行在ImageView位置的一行的垂直中心开始,在ImageView位置以下一行的垂直中心结束。

我想我应该尝试:

  1. 覆盖行视图。 在Adapter的GetView中,我创建行视图传递到相邻行的此行视图坐标。 在视图的onDraw方法中计算坐标和绘制线。

  2. 覆盖ListView。在它的OnDraw方法中尝试获取ImageView的位置并绘制所有行。

3 个答案:

答案 0 :(得分:6)

  <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

      <ListView 
         android:id="@+id/android:list"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:divider="#FFCC00"
         android:dividerHeight="4px"/>

      </LinearLayout>

拥有listview分隔符。

答案 1 :(得分:1)

我不确定我是否正确理解了你的问题,但这应该在行之间做出非常好的渐变线:

    mListView = getListView();
    mAdapter = new ServersListAdapter(this, new String[] {},
            new String[] {}, new String[] {});
    int[] colors = { Color.parseColor("#D3D3D3"), Color.parseColor("#D3D3D3"), Color.parseColor("#D3D3D3") };
    mListView.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));

答案 2 :(得分:1)

这是可以在其中画线的视图的示例。创建此类,并在需要时刷新调色板。

public class LineTextView extends AppCompatTextView {

    private Paint paint = new Paint();

    public LineTextView(Context context) {
        super(context);
    }

    public LineTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LineTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setColor(Color.parseColor("#000000"));
        paint.setStrokeWidth(2);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawLine(0, 0, 0, getHeight(), paint);
    }
}

现在您可以在layout

中使用它了
<LinearLayout

        android:layout_width="2dp"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <com.example.taskmodel.view.LineTextView
            android:id="@+id/lineTextViewTopHalf"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:visibility="invisible"/>

        <com.example.taskmodel.view.LineTextView
            android:id="@+id/lineTextViewBottomHalf"
            android:layout_width="2dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" />

    </LinearLayout>