У меня есть простой класс, 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 );
}