Androidアプリのキャンバスに、以下の7つのペイントオブジェクトを使用して円を描いています。同じペイント オブジェクトを複数回使用して、この円を描くことができます。
ここで、ユーザーが各色をタッチしたときに、タッチしたペイント オブジェクトの色名を表示したいと考えています。
これどうやってするの ?
Androidアプリのキャンバスに、以下の7つのペイントオブジェクトを使用して円を描いています。同じペイント オブジェクトを複数回使用して、この円を描くことができます。
ここで、ユーザーが各色をタッチしたときに、タッチしたペイント オブジェクトの色名を表示したいと考えています。
これどうやってするの ?
すべてのカラー サークルの位置が必要です。onTouchEvent() 内で、各カラー サークル間の距離とタッチ位置をカラー サークル半径と比較できます。
距離が半径よりも小さい場合 (最小値よりも大きい可能性があるため、円内の空の領域ではなく、色のみがタッチ可能です)、この方法で角度を取得し、選択した色を決定できます。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
for (colorCircle c : allCircles) {
float distance = sqrt ((event.getX() - c.getX())^2 +
((event.getY() - c.getY())^2);
if (distance < c.getRadius()) {
for (coloredPart cPart : c) {
if (event.getX() > (Math.cos(cPart.getMinAngle) * c.getRadius)
+ c.getX() &&
event.getX() < (Math.cos(cPart.getMaxAngle) * c.getRadius)
+ c.getX() &&
event.getY() > (Math.sin(cPart.getMinAngle) * c.getRadius)
+ c.getY() &&
event.getY() < (Math.sin(cPart.getMaxAngle) * c.getRadius)
+ c.getY() && ) {
// cPart was touched
}
}
}
}
}
return true;
}
同じようにタッチイベントで使用します:
public class TouchImage extends ImageView {
Paint paint = new Paint();
Point point = new Point();
public TouchImage(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.BLUE);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(point.x, point.y, 10, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
point.x = event.getX();
point.y = event.getY();
invalidate();
}
return true;
}
class Point {
float x, y;
}
}