질문 먼저 드리면.... 캔버스에 렉트를 사용하여 그림을 넣엇습니다.
그런데 이 그림을 회전을 시키고 싶습니다.
캔버스 회전이 아닌 렉트가 횢하는거지요...
이미지는 회전을 시켜 보았지만... 렉트크기가 정해 져있어 회전할때마다 이미지가 일그러지는 ㅜ.ㅜ
분명 렉트 회전이 잇을텐데..... 방법좀 알려 주세요...
저도 이 이미지 플립 시키는거 땜에 엄청 고생했었습니다 바야바 형님 덕에 금방 해결했지만요
캔버스의 scale 함수 검색해서 찾아보세요 이미지 반전시키는건 금방 나올겁니다 회전은 모르겟네요
canvas에 매트릭스 적용해서 회전합니다.
물론 캔버스에 여러개 도형을 입힌다음에 회전하면 다 회전합니다.
응용 잘하면 따로 회전하는것도 가능합니다. 하지만 머리는 좀 아픕니다. ㅡㅡㅋ
RotateDrawable의 draw 메소드가 힌트가 될수 있겠습니다.
RotateDrawable은 각도를 xml로 정의하지 않으면 넣을수 있는 방법이 없어서 쓰기 곤란할 수도 있지만
그리는 방법은 잘 나와있군요... 저 메소드만 베껴도 응용이 가능할 듯 합니다.
Rect 로 무슨 그림을 그리셨는지는 모르겠네요. drawRect라면 Paint 에 Shader 설정하셔서 Bitmap을 그리신 것인지.
아니면 drawBitmap을 이용하여 인자로 Rect를 전달하신것인지,
Rect는 개념적으로 네 귀퉁이의 좌표를 나타내는 것이 아니라, left, top, right, bottom 을 나타냅니다. 사각형 회전을 위해선 (x,y) 네 쌍, 총 여덟개의 변수가 필요한데, Rect는 네개의 변수밖에 없습니다. 따라서 Rect는 회전이라는 개념 자체가 존재하지 않구요...
제대로 하실려면 시간을 들여서 Matrix를 좀 공부하시는 편이 좋습니다.
방법이 아주 없지는 않구요. 꼭 당장 Rect를 사용하여 이미지를 그리고 싶으시다면, 추천하진 않지만 캔버스를 회전 시키는 방법이 있습니다. 꼼꼼하게 해 주면 여러 오브젝트를 돌리거나, 배경을 설정하는 것도 가능합니다. 아래는 이 방법으로 회전 시키는 코드입니다.
public class RotationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyImageView(getApplicationContext(), null));
}
class MyImageView extends ImageView{
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint.setColor(Color.RED);
}
Paint mPaint = new Paint();
RectF mRect = new RectF(100, 100, 200, 200);
int mDeg;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas); // 캔버스를 회전
canvas.rotate(mDeg, 150, 150); // (각도, x, y) x, y는 사각형의 중심
canvas.drawRect(mRect, mPaint); // 캔버스에 그림, 회전 시킬 이미지나 drawable을 그려줌.
canvas.rotate(-mDeg); // 캔버스 회전 복구
mDeg++;
invalidate();
}
}
}



