안 드 로 이 드 는 클릭 위치 가 부채 형 영역 에 있 는 지 판단 합 니 다.

알 리 페 이 기장 본 화면 효 과 를 모방 할 때 문제 가 발생 했 습 니 다.링 그림 에서 모든 링 을 클릭 하면 서로 다른 내용 을 나 타 낼 수 있 기 때문에 사용자 가 어떤 링 을 클릭 했 는 지 판단 해 야 합 니 다.인터넷 에서 자 료 를 조회 하면 색채 에 따라 판단 할 수 있다 고 하지만 마음 속 으로 는 색채 에 따라 좋 은 해결 방안 이 아니 라 고 생각 합 니 다(이 문 제 를 해결 할 수 있 지만).따라서 자신 이 다음 문 제 를 해결 하 는 방법 을 기록 하 는 것 도 후속 복습 에 도움 이 된다.
부채꼴 그리 기
클릭 한 위치 가 부채 형 영역 에 있 는 지 판단 하려 면 먼저 부채 형 을 그 려 야 합 니 다.부채 형 을 그 리 는 방법 은 canvas.draw Arc()방법 을 사용 할 수 있 습 니 다.Path 를 사용 하 는 방법 을 소개 하고 canvas.drawPath(ovalPath,paint)를 호출 합 니 다.방법 으로 그립 니 다.
주요 코드 는 다음 과 같 습 니 다.

@Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    //              
    canvas.translate((getWidth() + getPaddingLeft() - getPaddingRight()) / 2,
        (getHeight() + getPaddingTop() - getPaddingBottom()) / 2);

    ovalPath.moveTo(0, 0);
    ovalPath.lineTo(100, 0);
    RectF oval = new RectF(-100,-100,100,100);
    ovalPath.addArc(oval, 0, 160);
    ovalPath.lineTo(0, 0);
    ovalPath.close();
    RectF r = new RectF();
    ovalPath.computeBounds(r, true);
    mRegion.setPath(ovalPath, new Region((int)r.left, (int) r.top, (int) r.right,(int)r.bottom));
    Paint paint = new Paint();
    paint.setColor(Color.RED);
    paint.setAntiAlias(true);
    paint.setStrokeWidth(1);
    paint.setStyle(Paint.Style.STROKE);
    canvas.drawPath(ovalPath,paint);
    mCenterCircleX = (getWidth() + getPaddingLeft() - getPaddingRight()) / 2;
    mCenterCircleY = (getHeight() + getPaddingTop() - getPaddingBottom()) / 2;

}
클릭 위 치 를 가 져 와 부채 모양 에 있 는 지 여 부 를 판단 하 는 방법 은 다음 과 같 습 니 다.

 public boolean onTouchEvent(MotionEvent event) {
    float x;
    float y;
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        x = event.getX()-mCenterCircleX;
        y = event.getY()-mCenterCircleY;
        boolean b = mRegion.contains((int) x, (int) y);
        Log.d(TAG, "onTouchEvent: b: "+b +" x: "+ x+" y: "+y);
        break;

    }
    return true;
}
여기 서 주의해 야 할 것 은 클릭 위 치 를 얻 은 후에 좌표 의 오프셋 을 줄 여야 한다.그렇지 않 으 면 정확 한 결 과 를 얻 지 못 할 것 이다.


이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기