Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-自定义视图边框_Java_Android_Xml_View_Border - Fatal编程技术网

Java Android-自定义视图边框

Java Android-自定义视图边框,java,android,xml,view,border,Java,Android,Xml,View,Border,我有一个简单的类,BoundedView,它扩展了View。我这样做主要是为了搞乱onTouchEvent回调函数 是否有一种方法可以从类本身在该视图的每个实例周围绘制边界?如果没有,最简单的方法是什么 实施: public class BoundedView extends View { public String cellName = "no name"; // constructors are here. @Override public void onDraw( Ca

我有一个简单的类,
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"/>
然而,它绘制的是一个完全填充的黑框,而不是一个带有黑色边框的透明框

编辑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 );
}

是的,在您的
onDraw()中是正确的位置

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

这应该行得通。如果正确设置了
paint
变量(笔划宽度、颜色),您应该可以看到边框。

paint-paint=new-paint();油漆。设置颜色(颜色为黑色);油漆。设置行程宽度(1.0f);drawRect(0,0,getWidth(),getHeight(),paint)只给了我一个黑色正方形。我错过什么了吗?我需要非边框是透明的,因为它后面有一个ImageView。请尝试“paint.setStyle(Style.STROKE)”。这对不同大小的视图不起作用。它有时给出小边界,有时给出大边界。
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);