Рисовать линии между строками ListView

У меня есть ListView с ImageView в строках.

Мне нужно нарисовать линии между этими ImageViews.

Таким образом, одна строка начинается в первом ряду в позиции ImageView и заканчивается во втором ряду в позиции ImageView. И так далее.

Как лучше всего нарисовать эти линии?

Спасибо.

ОБНОВИТЬ. Извините, я не могу загрузить изображение и плохо говорю по-английски.

Это не горизонтальный разделитель между рядами. Если упростить это: линия начинается в вертикальном центре одного ряда в положении ImageView и заканчивается вертикальным центром следующего ряда в положении ImageView.

Я думаю, что я должен попробовать:

  1. Отменить просмотр строки. В GetView Адаптера, где я создаю представление строки, передаем в эту строку координаты соседних строк. В методе onDraw представления рассчитайте координаты и нарисуйте линию.

  2. Переопределить ListView. В его методе OnDraw попробуйте получить позиции ImageView и нарисовать все линии.

2 ответа

  <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>

Есть разделитель списка.

Я не уверен, правильно ли я понял ваш вопрос, но это должно создать действительно хорошие градиентные линии между строками:

    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));

Это пример представления, в котором вы можете провести линию. Создайте этот класс, обновите палитру, если вам нужно.

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>
Другие вопросы по тегам