프레임레이아웃 위에 동적으로 이미지뷰를 추가한 후
이미지 뷰 클릭시 일정 각도로 회전하는 에니메이션을 만들고 있습니다.
최초 클릭시에는 정상적으로 이미지의 어느 곳을 클릭해도 정상적으로 이벤트에 반응을 하는데
두번째 부터는 화면상의 이미지를 클릭해도 이벤트 반응이 없는 곳이 있습니다.
반대로 원래 최초 이미지뷰가 생성된 영역을 누를 경우에는 이벤트가 발생합니다.
화면에 보이는 이미지와 실제 이벤트를 발생시키는 이미지뷰 영역이 다른 것 같습니다.
에니메이션은 이미지를 다시 그리는 일 만하고 실제 영역은 원래 자리에 그대로 있는 것 같습니다.
에니메이션이 끝나는 곳에 다른 이미지뷰를 숨겼다가 에니메이션 종료후에 나타나도록 하려고 하는데
회전된 상태의 이미지뷰 영역을 만들 길이 없습니다.
기존의 Layout Params는 수평 영역으로만 만들어지고 기울어진 상태로 만들 수 있는 방법이 없네요.
혹시 만들 수 없다면 이 문제를 해결할 수 있는 좋은 방법이 있을까요?
기울어진 이미지뷰의 영역을 좌표형태로 처리할 수 있는 방법이 있을까요?
도움 부탁드립니다.
소스코드입니다.
====================================================================
package edgar.kr.android.rotateimage;
import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class RotateImageActivity extends Activity {
private FrameLayout mFrameLayout;
private float currentRotation;
private ImageView i;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mFrameLayout = (FrameLayout) findViewById(R.id.ll01);
i = new ImageView(this);
i.setImageResource(R.drawable.dollar100);
i.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions
i.setLayoutParams(new FrameLayout.LayoutParams(170, 67, Gravity.CENTER));
i.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
turn();
}
});
mFrameLayout.addView(i);
}
public void turn()
{
RotateAnimation anim = new RotateAnimation(currentRotation, currentRotation + 30,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
currentRotation = (currentRotation + 30) % 360;
anim.setInterpolator(new LinearInterpolator());
anim.setDuration(500);
anim.setFillEnabled(true);
anim.setFillAfter(true);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
Matrix mat = i.getImageMatrix();
Log.i("kcy", mat.toString());
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationStart(Animation animation) {}
});
i.startAnimation(anim);
}
}