0

パスを使用して描画可能な背景を描画しようとしています。しかし、背景を受け取るオブジェクトのサイズが必要なため、描画できない1つのポイントに到達します。描画する特定のビューのサイズを見つける機能はありますか?

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

}

}
4

2 に答える 2

0

ビューのサイズを取得するには、getWidth()とを呼び出すことができますgetHeight()。あなたも興味があるかもしれないことに注意してgetMeasuredWidth()くださいgetMeasuredHeight()

ビューのレイアウトプロセスの後に、これらのメソッドが呼び出されることを確認してください。

于 2013-03-04T15:46:10.477 に答える
0

Drawable.getBounds()またはDrawable.copyBounds(Rect rect)メソッドを呼び出します。

これらの2つのメソッドは、描画を希望するView境界を返す必要があります(サイズが変更されると、適切なパラメーター値を使用して、それぞれのメソッドをView呼び出す(呼び出す必要があります))。独自のカスタムDrawableは、またはを呼び出すことでこの値を取得できます。Drawable.setBoundsDrawableViewDrawableDrawable.getBounds()Drawable.copyBounds(Rect rect)

于 2013-03-04T16:25:06.480 に答える