안 드 로 이 드 개발 다양한 그래 픽 그리 기 기능 예시 구현

본 고 는 안 드 로 이 드 개발 이 각종 도형 그리 기 기능 을 실현 하 는 것 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
여기에 본인 의 개발 사례 를 결합 해 안 드 로 이 드 플랫폼 에서 다양한 그래 픽 을 그 리 는 방법 을 간단히 소개 한다.
먼저 View 클래스 를 사용자 정의 합 니 다.이 view 클래스 는 Paint 대상 이 도형 의 속성 을 제어 해 야 합 니 다.Path 대상 이 도형 그리 기 경 로 를 기록 해 야 합 니 다.Canvas 클래스 가 그림 그리 기 작업 을 수행 해 야 합 니 다.비트 맵 클래스 가 그림 의 결 과 를 담 을 필요 가 있 습 니 다.

Paint mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setColor(0xFFFF0000);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(12);

이 코드 는 Paint 대상 을 초기 화하 고 붓 의 색상,유형,굵기 를 설정 합 니 다.

BitmapmForeBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
CanvasmCanvas = new Canvas(mForeBitmap);
PathmPath = new Path();

이 코드 는 Bitmap 대상 을 만 들 고 그 를 매개 변수 로 Canvas 대상 에 게 전달 하 며 Path 대상 을 초기 화 합 니 다.
View 가 사용자 의 터치 이벤트 에 응답 하려 면 View 류 의 onTouchEvent 함 수 를 실현 해 야 합 니 다.코드 는 다음 과 같 습 니 다.

@Override
public boolean onTouchEvent(MotionEvent event) {
  float x = event.getX();
  float y = event.getY();
  switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      touch_start(x, y);
      invalidate();
      break;
    case MotionEvent.ACTION_MOVE:
      touch_move(x, y);
      invalidate();
      break;
    case MotionEvent.ACTION_UP:
      touch_up();
      invalidate();
      break;
  }
  return true;
}

그 중 touchstart,touch_move 와 touchup 함 수 는 각각 누 르 고 이동 하고 들 어 올 리 는 이 벤트 를 처리 합 니 다.함수 의 실현 은 뒤에서 소개 합 니 다.invalidate 함 수 는 onDraw 함 수 를 호출 하여 그림 효 과 를 실시 간 으로 표시 합 니 다.
touch_start 함 수 는 다음 과 같 습 니 다.

mPath.reset();
mPath.moveTo(x,y);
mX= x;
mY= y;

Path 를 비 울 때마다 출발점 으로 이동 하고 출발점 을 기록 합 니 다.
touch_move 함 수 는 다음 과 같 습 니 다.

switch(mShape)
{
  case 1:
    float dx = Math.abs(x - mX);
    float dy = Math.abs(y - mY);
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
      mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
      mX = x;
      mY = y;
    }break;
  case 2:
    mPath.reset();
    mPath.moveTo(mX, mY);
    mPath.lineTo(x, y);
    break;
  case 3:
    mPath.reset();
    RectF mRect = new RectF();
    mRect.set(mX, mY, x, y);
    mPath.addOval(mRect, Path.Direction.CW);
    break;
  case 4:
    mPath.reset();
    RectF mRect1 = new RectF();
    mRect1.set(mX, mY, x, y);
    mPath.addRect(mRect1, Path.Direction.CW);
    break;
}

mShape 의 값 에 따라 다른 도형 을 그립 니 다.1 시 에 Bezier 곡선 을 그립 니 다.2 시 에 직선 을 그립 니 다.3 시 에 타원 을 그립 니 다.4 는 직사각형 을 그립 니 다.각각 Path 류 의 서로 다른 함수 로 이 루어 집 니 다.
touch_up 함 수 는 다음 과 같 습 니 다:

mCanvas.drawPath(mPath,mPaint);
mPath.reset();

Path 를 Canvas 의 Bitmap 에 그립 니 다.
마지막 으로 OnDraw 함수 에서 현재 Bitmap 를 그 려 야 합 니 다.

protectedvoid onDraw(Canvas canvas)
{
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    canvas.drawBitmap(mBitmap,0, 0, mBitmapPaint);
}

큰 성 과 를 거 두 었 습 니 다.캡 처 는 다음 과 같 습 니 다.

더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,,,
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기