Рисование линии под видом в Android - PullRequest
0 голосов
/ 20 сентября 2011

Я использую метод onDispatchDraw (Canvas canvas) для рисования линий в моем представлении.Когда я вызываю canvas.drawLine (), он всегда рисует линию поверх всех моих просмотров.Есть ли способ нарисовать линию под кнопкой, но поверх другого представления в моем макете, используя canvas.drawLine ()?

Я пробовал следующее, но он все равно рисует линию над кнопкой.

Button b;
RelativeLayout r;
@Override
protected void dispatchDraw(Canvas canvas) {
     super.dispatchDraw(canvas);

     Paint p = new Paint();
     p.setColor(Color.Black);

     canvas.drawLine(0,0,100,100,p);

     r.removeView(b);
     r.addView(b);
}

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

Вы пытаетесь заново изобрести колесо.Z-упорядочение уже реализовано в подсистеме управления окнами, и вы можете использовать его.

  1. Создайте пользовательский вид, на котором вы хотите рисовать.
  2. Сделайте его недоступным для клика, используя android:clickable="false" или setClickable(false).
  3. Сделайте фон прозрачным и реализуйте dispatchDraw().
  4. Поместите все виды, которые вы не делаетехочу рисовать над этим представлением в иерархии представлений.
1 голос
/ 24 сентября 2011

Позвоните super.dispatchDraw() после рисования линии.DispatchDraw вызывается viewgroup для отрисовки его потомков, поэтому в вашем случае вызов super.dispatchDraw() сначала нарисует кнопку, а затем нарисуете над ней линию.Сделайте dispatchDraw таким образом:

Обновленный код

class myListViewWithLine extends ListView {
....
    @Override
    protected void dispatchDraw(Canvas canvas) {

         Paint p = new Paint();
         p.setColor(Color.Black);
         canvas.drawLine(0,0,100,100,p);

         super.dispatchDraw(canvas);
    }
....
}
0 голосов
/ 23 сентября 2011

Другим способом будет просто добавить вид с 1 падением в качестве высоты и цвета фона, как вам нравится, под кнопкой.Это должно выглядеть как линия.

View v = new View(this);
ViewGroup.LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT,1);
v.setLayoutParams(lp);
v.setBackgroundColor(Color.WHITE);

addView(v,INDEX NUMBER AFTER THE BUTTON);
...