5

画像内のオブジェクトを指す矢印を描画しようとしています。線を描画するコードを書くことができましたが、矢印を描画する方法を見つけることができないようです.ドラッグ可能な線を描画するために書いたコードは次のとおりです.ACTION_UPイベントで矢印を描画する必要があります線が指している方向

if(event.getAction() ==MotionEvent.ACTION_DOWN) {         
     if (count==1){ 
          x1 = event.getX();
          y1 = event.getY();
          System.out.println(count+"count of value a;skd");
          Toast.makeText(getApplicationContext(), ""+(radius+count), Toast.LENGTH_LONG).show();

          Log.i(TAG, "coordinate x1 : "+String.valueOf(x1)+" y1 : "+String.valueOf(y1));
     }
}
else if(event.getAction() ==MotionEvent.ACTION_MOVE){

     imageView.setImageBitmap(bmp2);
     x2 = event.getX();
     y2 = event.getY();
     posX=(float)(x1+x2)/2;
     posY=(float)(y1+y2)/2;
     radius=(float) Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))/2;
     onDraw();
     Toast.makeText(getApplicationContext(), ""+radius, Toast.LENGTH_LONG).show();
}

こんにちは、まだ助けが必要な人のために。

    float phi = (float) Math.atan2(y2 - y1, x2 - x1); 
    float angle1 = (float) (phi - Math.PI / 6); 
    float angle2 = (float) (phi + Math.PI / 6);

    float x3 = (float) (x2 - h * Math.cos(angle1));
    float x4 = (float) (x2 - h * Math.cos(angle2));
    float y3 = (float) (y2 -  h * Math.sin(angle1));
    float y4 = (float) (y2 -  h * Math.sin(angle2));
   c.drawLine(x1, y1,x2,y2 ,pnt);
   c.drawLine(x2, y2,x3,y3 ,pnt);
    c.drawLine(x2, y2,x4,y4 ,pnt);

受け入れられた回答とstackoverflowのiosセクションから助けを得ました

4

3 に答える 3

5

これを行う方法は、2 つの点 (始点と終点) の間に描かれた線の傾きを見つけることです。勾配は (dy/dx) になり、それが矢印の良い出発点になります。矢じりのベースを矢印の線に垂直にしたい場合、ベースの傾きを見つけるには、線の傾きの反対の逆数を見つけます。たとえば、直線の傾きが 2 だとします。(1/(oldslope)) を実行して -1 を掛けるので、三角形の底辺の傾きは (-1/2) になります。Android についてはよくわかりませんが、私の記憶が正しければ、Java では drawPolygon メソッドを使用し、4 つのポイントを指定する必要があります (3 つの一意のポイントと最初のポイントと同じ 1 つを閉じます)。先端の付け根の傾きを考えると、最初の 2 つの点と最後の点を得ることができます。bベースラインの長さになります。を取るϴ=arctan(dy/dx)と、x 軸とベースラインの間の角度が得られます。その ϴ 値を使用しydif = b*sin(ϴ)て、矢印の 2 つのベース コーナー間の y 値の差を取得できます。を使用して同じことを行うとxdif = b*cos(ϴ)、2 つの基点間の x 値の差が得られます。ユーザーが描いた線の最終点の位置が である場合(x1, y1)、三角形の基点の位置は(x1-(xdif/2), y1-(ydif/2))およびになり(x1+(xdif/2), y1+(ydif/2))ます。これらの 2 つのポイント p1 と p2 は、ポリゴン描画メソッドの 1 番目、2 番目、4 番目のポイントです。3 番目の点を見つけるには、次のようにして、元の線の角度を見つける必要があります。ϴ=arctan(dy/dx)、今回はオリジナルの dy/dx を使用します。その角度で。ポイントの実際の計算を終了する前に、最初に矢印の先端が実際に線の端からどれだけ離れているかを知る必要があります。私の場合は、変数 h と を使用しh = 10ます。座標 (x,y) を取得するには、線の先端の座標を (x1, y1) とすると、次のようになります(x1+hcosϴ, y1+hsinϴ)。これを の 3 番目の値に使用すると、drawPolygon()完了です。最後に急いで申し訳ありませんが、タイピングにうんざりしました。助けが必要な場合はコメントしてください。

于 2013-07-17T12:46:33.570 に答える
1

入力イベントから線を引くことができた場合は、その端に方向を示す三角形を追加で描くことができます。

別のプロジェクトでは、グリッド上の磁気ポイントがタッチされるたびに四角形を描きました (ここで確認できるように)。申し訳ありませんが、現在サンプル コードを提供できません。しかし、それがあなたにとって適切なアプローチである場合は、後で投稿するかもしれません.

于 2013-07-17T10:24:24.403 に答える