グラフィックス(4)-座標と座標をあらわすクラス
グラフィックを描画するには、描画する位置を座標で指定する必要があります。
ここでは、座標と座標をあらわすクラスについてみていきます。
描画領域の取得
グラフィックの描画領域は、右上の点を(0,0)として右に向かってx座標の値が、下に向かってy座標の値が増えていきます。
Viewクラスの描画領域を取得するには、getWidthメソッドとgetHeightメソッドを使って取得できます。
SurfaceViewの描画領域も、Viewクラスのサブクラスですので、同じように取得できます。
Canvasクラスにも、getWidthメソッドとgetHeightメソッドがありますが、こちらはWindowのタイトルバーも含めた領域となるようです。
Canvasクラスにも、getWidthメソッドとgetHeightメソッドがあります。
また、View#onSizeChangedメソッドをオーバライトすると、画面サイズ変更時に画面サイズの値が引数として渡されます。
SurfaceViewでは、「グラフィックス(2)-SurfaceViewによる描画」のリスト6の例のように、SurfaceHolder.Callback#surfaceChangedメソッドも利用できます。
以下に、サンプルプログラムを示します。
リスト8(GraphicsSample3.java)
このプログラムを実行すると、以下のような画面が表示されます。
Canvasより取得した領域の方が、Heightの値が大きいことがわかります。
面白い事に、SurfaceHolder#lockCanvasで取得したCanvasオブシェクトより取得した領域では、Heightの値は同じ値になりました。
座標位置の指定には、int型とfloat型の値および、int型とfloat型の配列が使われますが、 アンドロイドには、以下に示すように、座標を指定するためのクラスも用意されています。
点をあらわすPointクラスとPointFクラス
PointクラスとPointFクラスには、どちらもPublicなインスタンス変数x,yが定義されていて、それぞれx座標とy座標を示しています。
PointクラスとPointFクラスの違いは、Pointクラスがインスタンス変数x,yの型がint型であるのに対してPointFクラスではfloat型である事です。
PointクラスまたはPointFクラスを指定して、グラフィックスを描画するメソッドは無いようですが、点を指定できるクラスがあることは覚えていたほうが良いでしょう。
自作のメソッドなどで、座標点を指定するために使用すれば、便利に使えると思います。
PointクラスとPointFクラスのコンストラクタは、以下の形式となります。
- Point(),PointF()
- Point(int x, int y),PointF(float x, float y)
- Point(Point src),PointF(Point p)
矩形をあらわすRectクラスとRectFクラス
RectクラスとRectFクラスには、どちらもPublicなインスタンス変数bottom,left,right,topが定義されていて、それぞれ右上隅と左下隅のx座標とy座標を示しています。
RectクラスとRectFクラスの違いは、Rectクラスがインスタンス変数bottom,left,right,topの型がint型であるのに対して、RectFクラスではfloat型である事です。
CanvasクラスのdrawRectメソッドや、drawOvalメソッド等の一部の図形を描画するメソッドでは、描画領域を指定するのにRectクラス,RectFクラスの引数が使えます。
RectクラスとRectFクラスのコンストラクタは、以下の形式となります。
- Rect(),RectF()
- Rect(int left, int top, int right, int bottom),RectF(float left, float top, float right, float bottom)
- Rect(Rect r),RectF(Rect r)
(描画)領域をあらわすRegionクラス
領域をあらわす、Regionクラスも定義されています。Regionクラスには、Enum型Region.Opが定義されていて、領域どうしを結合する方法を指定するのに使います。
RegionクラスとRegion.Opの例については、グラフィックス(9)-描画領域のクリップを参照して下さい。
参考URL