마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 누를때마다 90도 회전하는 애니메이션

0 추천

자동차 계기판처럼 움직이는 바늘을 만들고 있습니다

버튼이 눌리면  90도 각도를 회전(한쪽끝을 축으로 틸트) 하고

그상태가 유지되다 값이 다시 버튼을 누르면 추가로 회전하는

버튼한번누를때마다 90도씩 회전하는 핀 애니메이션을 구현하고 싶은데

FillAfter를 이용해서 첫번째 애니매이션이 끝나고 그상태가 유지되는것까지는 만들었으나 

그뒤에 다른값이 들어올 경우 유지된 상태(각도)에서 다른 각도로 움직이는 애니메이션을 만들지 못하고 있습니다.

방법이 있을까요?

아래는  버튼의 onClic 코드입니다

 

RotateAnimation dd = new RotateAnimation(0,90,RotateAnimation.RELATIVE_TO_SELF,0.5f,RotateAnimation.RELATIVE_TO_SELF,0.85f);
dd.setFillBefore(true);
dd.setFillAfter(true);
dd.setDuration(500);
dd.setRepeatCount(0);


//dd.setInterpolator();
dd.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {

    }

    @Override
    public void onAnimationEnd(Animation animation) {

    }

    @Override
    public void onAnimationRepeat(Animation animation) {

    }
});
imageView.setAnimation(dd);
imageView.startAnimation(dd);
신입 (570 포인트) 님이 2016년 12월 2일 질문

1개의 답변

0 추천
 
채택된 답변

안녕하세요

애니메이션으로는 해보진 않았지만 화면 이미지 화면 회전하는 소스가 있어서 올립니다.

응용해보세요!

 

	
// 메소드 이용방법
int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
int exifDegree = exifOrientationToDegrees(exifOrientation);
bitmap = rotate(bitmap, exifDegree);



/**
     * EXIF정보를 회전각도로 변환하는 메서드
     * 
     * @param exifOrientation EXIF 회전각
     * @return 실제 각도
     */
    public int exifOrientationToDegrees(int exifOrientation)
    {
    	if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_90)
    	{
    		return 90;
    	}
    	else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_180)
    	{
    		return 180;
    	}
    	else if(exifOrientation == ExifInterface.ORIENTATION_ROTATE_270)
    	{
    		return 270;
    	}
    	return 0;
    }

    /**
     * 이미지를 회전시킵니다.
     * 
     * @param bitmap 비트맵 이미지
     * @param degrees 회전 각도
     * @return 회전된 이미지
     */
    public Bitmap rotate(Bitmap bitmap, int degrees)
    {
    	if(degrees != 0 && bitmap != null)
    	{
	        Matrix m = new Matrix();
	        m.setRotate(degrees, (float) bitmap.getWidth() / 2, 
	        (float) bitmap.getHeight() / 2);
        
	        try
	        {
	        	Bitmap converted = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
	        	if(bitmap != converted)
	        	{
	        		bitmap.recycle();
	        		bitmap = converted;
	        	}
	        }
	        catch(OutOfMemoryError ex)
	        {
	        	// 메모리가 부족하여 회전을 시키지 못할 경우 그냥 원본을 반환합니다.
	        }
    	}
     	return bitmap;
    }

 

히로시 (10,800 포인트) 님이 2016년 12월 2일 답변
신입님이 2016년 12월 6일 채택됨
...