Android - пользовательский вид границы - PullRequest
2 голосов
/ 02 марта 2012

У меня есть простой класс, BoundedView, который расширяет View.Я делаю это прежде всего, чтобы связываться с функцией обратного вызова onTouchEvent.

Есть ли способ нарисовать границу вокруг каждого экземпляра этого представления, из самого класса?Если нет, то как проще всего это реализовать?

Реализация:

public class BoundedView extends View
{
  public String cellName = "no name";

  // constructors are here.

  @Override
  public void onDraw( Canvas canvas )
  {
    // maybe here? Right now it's invisible, used only for touch detection
  }

  @Override
  public boolean onTouchEvent( MotionEvent event )
  {
    Intent i = new Intent( getContext(), TabCellDetails.class );
    i.putExtra( "cellName", this.cellName );
    getContext().startActivity( i );

    return false;
  }
}

Использование:

<com.lifecoderdev.android.drawing1.BoundedView
        android:id="@+id/boundedView1"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="78dp"
        android:layout_marginRight="96dp" 
        android:tag="Smooth Endoplasmic Reticulum"/>

РЕДАКТИРОВАНИЕ: Это приближает меня:

public void onDraw( Canvas canvas )
{
  int[] colors = { 0xFF000000, 0xCC000000 };
  float[] radii = { 5, 5, 5, 5, 5, 5, 5, 5 };
  GradientDrawable drawable = new GradientDrawable( GradientDrawable.Orientation.TOP_BOTTOM, colors );
  drawable.setCornerRadii( radii );
  drawable.setStroke( 1, 0xFF000000 );
  this.setBackgroundDrawable( drawable );
}

Тем не менее, оно рисует полностью заполненный черный ящик, а не прозрачный с черной рамкой.

РЕДАКТИРОВАТЬ 2: Понял:

Paint paint = new Paint();

paint.setColor( Color.RED );
paint.setStrokeWidth( 1.0f );

canvas.drawRect( 0, 0, getWidth(), 1.0f, paint );
canvas.drawRect( 0, 0, 1.0f, getHeight(), paint );
canvas.drawRect( 0, getHeight()-1.0f, getWidth(), getHeight(), paint );
canvas.drawRect( getWidth()-1.0f, 0, getHeight(), getWidth(), paint );

РЕДАКТИРОВАТЬ 3: Решение Андреаса и Уоррена было намного приятнее:

@Override
public void onDraw( Canvas canvas )
{
  Paint paint = new Paint();
  paint.setColor( Color.RED );
  paint.setStrokeWidth( 1.5f );
  paint.setStyle( Style.STROKE );

  canvas.drawRect( 0, 0, getWidth(), getHeight(), paint );
}

1 Ответ

5 голосов
/ 02 марта 2012

Да, внутри вашего onDraw() это правильное место.

canvas.drawRect(0, 0, getWidth(), getHeight(), paint);

Это должно сработать.Если вы правильно установите переменную paint (ширина обводки, цвет), вы должны увидеть границу.

...