2016-03-21 7 views
0

私は画面の中央に4つの円を持つカメラアプリに取り組んでいます。実際の画面と一致しないlocationonsreenのAndroid座標

このようになります。

enter image description here

私の目標は、センターサークルの部品の画像のみを取得することです。

私のテスト戦術はこのようでした。

  1. 描画するキャンバスを使用し

  2. (成功、実行される)1から撮影した写真を取得し、ImageViewの上に表示する(成功、行って)オーバーレイで

  3. をフルスクリーンのカメラを実装オーバーレイサークルの位置にある青い円(失敗)

青い円が描画されますが、いくつかの奇妙な場所です。

ここに私のコードです。

 //x, y = x, y coord of the left-top circle of the overlay. 
     //width = width of the left-top circle of the overlay. 

     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setColor(Color.BLUE); 

     Canvas canvas = new Canvas(b); 
     canvas.drawCircle(x, y, width/2, paint); 


     imageView.setImageBitmap(b); 

円は描かれていますが、実際は遠いところにあります。画面の下のほぼ下に表示されます。

半径は私が予想していたもののほぼ2倍です。

私はcanvas.drawCircle(x + width/2、y + height/2、...)を試しましたが、それは答えではないようです。

私は以下のコードを使ってx、y、幅を求めました。

int [] loc = new int[2]; 
circle1.locationOnScreen(loc); 
int x = loc[0]; 
int y = loc[1]; 
int width = circle1.getWidth(); 

私のコードに問題がありますか? x、y、widthの値は0ではなく、意味のある値になります。しかし、円がどこになければならないのかは分かりません。

答えて

1

drawCircleの位置は、あなたのビットマップに関連しています。使用しているImageViewがフルスクリーンでない場合、xとyはスクリーン座標にあるので間違っています。また、フルスクリーンでは、ステータスバーが表示されず、その下の画面には表示されません。

+0

アクションバーはありません。私はテーマ値を使ってそれを無効にしました。画像ビューは全画面表示です。しかし、それを1/4に縮小すると、高さが少し小さくなるので、私はimageViewのフィット感のスケーリングを使って画面を完全に合わせました。 – March3April4

0

実際には、ガベはそれについて正しいです。

私は、画面自体の座標とビットマップの座標が異なっているという概念全体が欠落していました。

非常に簡単な数式を使って解決しました。

ビットマップの全幅:? =画面の全幅:x(円のx座標)

? =ビットマップの全幅* x /画面の総幅

y、幅、高さと同じです。

したがって、上記の値を使用すると、円を描くコードは次のようになります。

canvas.drawCircle(x + width/2, y + height/2 - statusBarHeight, width /4, paint); 

statusBarHeightは、画面上部のステータスバーの高さです。

ビットマップには撮影済みのステータスバーが含まれていないため、ビットマップは円のy点から減算する必要があります。

関連する問題