在Android中绘制一个没有任何大小的自定义drawable

时间:2013-03-04 15:43:32

标签: java android drawable

我正在尝试用路径绘制可绘制的背景。但是我得到了一个我无法绘制的点,因为我需要接收背景的物体的大小。是否有一个函数来查找我将绘制的特定视图的大小?

public class CustomDrawableEditText extends Drawable{
private Context context;
public CustomDrawableEditText(Context context) {
    // TODO Auto-generated constructor stub
    this.context = context;
}
@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    Path path = new Path();
    Paint paint = new Paint();
    path.moveTo(0, 0);
    path.lineTo(10, 0);
    path.moveTo(0, 0);
    path.lineTo(0, Y);
    path.lineTo(10,  Y);
    path.moveTo( X, 0);
    path.lineTo( X-10, 0);
    path.moveTo( X, 0);
    path.lineTo( X,  X);
    path.lineTo( X-10,  X);
    paint.setColor(context.getResources().getColor(R.color.orange));
    paint.setStrokeWidth(2);
    paint.setStyle(Paint.Style.STROKE);
    canvas.drawPath(path, paint);
}

private int getY() {
    final Resources res = context.getResources();
    final float scale = res.getDisplayMetrics().density;
    return (int) (res.getDimension(R.dimen.dim4) * scale + 0.5f);
}
@Override
public int getOpacity() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public void setAlpha(int alpha) {
    // TODO Auto-generated method stub

}

@Override
public void setColorFilter(ColorFilter cf) {
    // TODO Auto-generated method stub

}

}

2 个答案:

答案 0 :(得分:0)

要获得View的大小,您可以调用getWidth()getHeight()。请注意,您可能也对getMeasuredWidth()getMeasuredHeight()感兴趣。

确保在视图的布局过程之后将这些方法称为

答案 1 :(得分:0)

调用Drawable.getBounds()Drawable.copyBounds(Rect rect)方法。

这两种方法应该返回View的范围(当View的大小发生变化时,它会调用(应该调用)每个Drawable.setBounds上的Drawable方法它具有适当的参数值),其中View希望绘制您的Drawable。然后,您自己的自定义Drawable可以通过调用Drawable.getBounds()Drawable.copyBounds(Rect rect)来检索此值。