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 - 自定义视图边框的主要内容,如果未能解决你的问题,请参考以下文章

Android 自定义图像视图形状

如何缩放视图并将自定义边框保持在原始大小\缩放?

iOS绘制带有底部边框的自定义视图

使用自定义 UIBezierPath 动画视图边框

如何删除自定义uiview中的边框线?

需要帮助在Android中使用多个按钮自定义视图