2013-03-04 93 views
0

我试图绘制一个可绘制的背景与路径。但我得到了一个我无法绘制的点,因为我需要接收背景的对象的大小。是否有函数来查找我将绘制的特定视图的大小?在Android中绘制无任何尺寸的自定义绘图

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 

} 

} 

回答

0

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

请确保这些方法在您的视图的布局过程之后调用

+0

我已经通过getwidth和getheight但都是0; – Tsunaze 2013-03-04 15:52:08

+0

@Tsunaze我又增加了一行。 – poitroae 2013-03-04 15:53:18

+0

有问题的视图通过单击按钮后的layoutinflater显示。我认为这是在布局过程之后。 – Tsunaze 2013-03-04 15:54:40

0

致电Drawable.getBounds()Drawable.copyBounds(Rect rect)方法。

这两个方法应该返回View的界限(当View的大小的变化,它会调用(应该叫)每个DrawableDrawable.setBounds方法,已与相应的参数值),其中View希望你Drawable被绘制。您自己的自定义Drawable可以通过调用Drawable.getBounds()Drawable.copyBounds(Rect rect)来检索该值。