Android - 自定义视图边框
Posted
技术标签:
【中文标题】Android - 自定义视图边框【英文标题】:Android - Custom View Border 【发布时间】:2012-03-01 22:38:32 【问题描述】:我有一个简单的类,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_
android:layout_
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="78dp"
android:layout_marginRight="96dp"
android:tag="Smooth Endoplasmic Reticulum"/>
编辑: This 让我接近:
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: Andreas 和 Warren 的解决方案要好得多:
@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】:是的,在您的onDraw()
中是正确的位置。
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
应该可以。如果您正确设置了paint
变量(笔画宽度、颜色),您应该会看到您的边框。
【讨论】:
Paint paint = new Paint(); paint.setColor( Color.BLACK ); paint.setStrokeWidth( 1.0f ); canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
只是给了我一个黑色方块。我错过了什么吗?我需要非边框是透明的,因为它后面有一个 ImageView。
试试“paint.setStyle(Style.STROKE)”。
这对于不同大小的视图来说是不一样的。它有时给出小边框,有时给出大边框。以上是关于Android - 自定义视图边框的主要内容,如果未能解决你的问题,请参考以下文章