パイの各部分がボタンであるパイの形をしたピースでカラーホイールを作ろうとしています。2 つのスライスのコードを次に示します。現在、2 番目のスライスが最初のスライスを白い背景で覆っています。私の目標は可能ですか?
ShapeDrawable slice1 = new ShapeDrawable(new ArcShape(0, 30));
slice1.setIntrinsicHeight(100);
slice1.setIntrinsicWidth(100);
slice1.getPaint().setColor(Color.MAGENTA);
View slice1View = (View) findViewById(R.id.slice1);
slice1View.setBackgroundDrawable(slice1);
slice1View.setOnClickListener(magentaButtonListener);
ShapeDrawable slice2 = new ShapeDrawable(new ArcShape(30, 60));
slice2.setIntrinsicHeight(100);
slice2.setIntrinsicWidth(100);
slice2.getPaint().setColor(Color.BLUE);
View slice2View = (View) findViewById(R.id.slice2);
slice1View.setBackgroundDrawable(slice2);
slice1View.setOnClickListener(blueButtonListener);
レイアウトコードは次のとおりです。
<FrameLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/pie" >
<View
android:id="@+id/slice1"
android:layout_width="40dp"
android:layout_height="40dp"/>
<View
android:id="@+id/slice2"
android:layout_width="40dp"
android:layout_height="40dp"/>
</FrameLayout>
編集!解決策: x 座標と y 座標を円の直径の半分に設定します。次に: getAngle メソッドを使用して角度を計算しました。これにより、クリックされた色が決まります。
//from StackOverflow post by Dave Discoid, at http://stackoverflow.com/questions/2676719/calculating-the-angle-between-the-line-defined-by-two-points
public double getAngle(float x, float y )
{
double dx = x - DIAMETER/2;
// Minus to correct for coord re-mapping
double dy = -(y - DIAMETER/2);
double inRads = Math.atan2(dy,dx);
// We need to map to coord system when 0 degree is at 3 O'clock, 270 at 12 O'clock
if (inRads < 0)
inRads = Math.abs(inRads);
else
inRads = 2*Math.PI - inRads;
return Math.toDegrees(inRads);
}