안녕하세요~


터치해서 움직이면 움직이는 각도로 이미지가 회전하는 커스텀 뷰를 만들었습니다.


그런데 퍼포먼스가 생각만큼 안나와서요.


혹시 잘못된부분이라던지


좋은방향 있으면 지적좀 해주시면감사하겠습니다~


아래는 코드입니다.


public class ImageRotate_C extends View {

private final String TAG = "ImageRotate_c";

private Matrix m;

private Canvas c;

private Bitmap b, rbmp, tbmp;

private Resources r;

private int id, w, h;


public ImageRotate_C(Context context) {

super(context);

m = new Matrix();

c = new Canvas();

}


public void ImageSetInit(Resources _r, int _id) {

r = _r;

id = _id;

b = BitmapFactory.decodeResource(r, id);

w = b.getWidth();

h = b.getHeight();

}


public void ImageRotate(float degree) {

rbmp = Bitmap.createBitmap(b, 0, 0, w, h, m, false);

m.setRotate(degree);

tbmp = Bitmap.createBitmap(w, h, Config.RGB_565);

c.setBitmap(rbmp);

c.drawBitmap(tbmp, w / 2 - tbmp.getWidth() / 2, h / 2 - tbmp.getHeight() / 2, null);

this.invalidate();

}


public void onDraw(Canvas canvas) {

canvas.drawBitmap(rbmp,0,0,null);

}


@Override

public boolean onTouchEvent(MotionEvent event) {

int action = event.getAction();

int x = (int) event.getX();

int y = (int) event.getY();

int dx = x - (w / 2);

int dy = y - (h / 2);

float radian = (float) (Math.atan2(dx, dy)); // PI

float degree = 180 - (float) Math.toDegrees(radian);

Log.i(TAG, "d :" + degree);


switch (action) {

case MotionEvent.ACTION_UP:

// 각도 저장;

// degree

return true;

case MotionEvent.ACTION_DOWN:

ImageRotate(radian);

return true;

case MotionEvent.ACTION_MOVE:

ImageRotate(degree);

return true;

}

return true;

}


public void onDestroy() {

rbmp.recycle();

rbmp = null;

}

}