안드로이드스터디 11

  • 7,376 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,376
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
71
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 0. 그래픽과 애니메이션 2 안드로이드 플랫폼은 다음 세 종류의 그래픽 애니메이션을 기본적으로 지원한다 . 1. 애니메이티드 GIF(Animated GIF) 이미지 애니메이티드 GIF 애니메이션의 여러 프레임 이미지들은 하나의 GIF 파일을 저장한 것임 . 애니메이티드 GIF 파일을 다른 비트맵 표시물 자원과 마찬가지 방식으로 화면에 표시하면 안드로이드 운영체제가 애니메이션을 수행시켜 줌 . 2. 프레임별 애니메이션 프레임별 애니메이션은 프레임별 이미지들을 개발자가 모두 제공해야 함 . 3. 트위닝 애니메이션 트위닝 애니메이션은 이미지의 위치와 형태를 코드에서 변환함으로써 애니메이션 효과를 냄 .
  • 2. 1. 애니메이션 1-1. 프레임별 애니메이션 프레임별 애니메이션 (frame-by-animation) 은 조금씩 다른 이미지들을 차례로 빠르게 화면에 표시함으로써 사물이 움직이는 듯한 환상을 만들어 내는 것이다 . 페이지를 빠르게 넘기면 그림이 움직이는 효과의 디지털 버전이라고 생각하면 된다 . 애니메이티드 GIF 도 본질적으로는 프레임별 애니메이션에 해당한다 . 이런 프레임별 애니메이션은 코드로 정의하기에는 너무 복잡한 그래픽 변형들에 적합하다 . 애니메이션의 매끄러움은 프레임 이미지들의 수와 그 이미지들의 교체 빠르기에 의해 결정된다 . 지니는 프레임들에서 변하지 않지만 , 선물 상자들은 그 위치가 조금씩 다르다 . 이 지니 파일들을 이용해서 수행하는 코드를 작성해보자 . 애니메이션의 조작을 위해서 사용할 패키지 – android.graphics.drawable.AnimationDrawable;; 1. 애니메이션이 계속해서 반복되도록 해주는 객체명 .setOneShot() 메소드 (true – 한번만 / false – 반복 ) 2. 애니메이션을 시작하게 해주는 객체명 .start() 메소드 3. 애니메이션을 멈추게 하는 객체명 .stop() 메소드 프레임 애니메이션 구현방법 (1) AnimationDrawable 과 ImageView 위젯을 이용해서 애니메이션을 수행 (2) ImageSwitcher 위젯에 프레임 이미지들을 비트맵 자원으로서 추가하고 코드에서 타이머를 이용해 애니메이션 효과를 얻을 수 있음 .
  • 3. 1. 애니메이션 1-1. 프레임별 애니메이션 ( 실습 1)
  • 4. 1. 애니메이션 1-1. 프레임별 애니메이션 ( 실습 2) ImageSwitcher 위젯에 프레임 이미지들을 비트맵 자원으로서 추가하고 코드에서 타이머를 이용해 애니메이션 효과를 얻을 수 있음 . 참고코드를 타이핑 하기 보단 붙여넣기로 수행해 봅시다 .
  • 5. 1. 애니메이션
    • 1-2. 트위닝 애니메이션 ( 개념 )
    • 트위닝 애니메이션 (tweened animation) 에서는 개발자가 비트맵이나 도형 , 텍스트 , 같은 표시물 객체나 임의의 뷰 위젯과 그것의
    • 변환 방식을 지정하면 시스템이 적절히 프레임들을 만들어서 애니메이션 효과를 만들어 낸다 .
    • 안드로이드는 알파 , 회전 , 확대 - 축소 , 이동 같은 여러 통상적인 이미지 변환들을 지원한다 .
    • 비트맵이나 도형을 담은 ImageView 같은 보통의 위젯뿐만 아니라 TableLayout 같은 레이아웃에 대해서도
    • 트위닝 애니메이션이 적용이 가능하다 .
    • 트위닝 변환은 XML 자원 파일에서도 코드에서도 직접 정의가 가능하다 .
    • 모든 트위닝 애니메이션은 시작 위치 , 지속 기간 , 반복 여부 같은 공통의 속성들을 공유한다 .
    • 동시적 애니메이션과 순차적 애니메이션 –
    • 애니메이션의 시작 시간과 지속 기간을 결정하는 startOffset 속성과 duration 속성을 적절히 정의함으로써 여러 개의 애니메이션
    • 변환들이 동시에 또는 차례로 적용되게 할 수 있다 . 여러 애니메이션들을 <set> 요소로 묶음으로써 ( 코드에서는 AnimationSet 클래스를
    • 이용해서 ) 애니메이션들이 동일 한 속성들을 공유하게 만들 수 있다 .
    • 예를 들어 첫 애니메이션은 2.5 초 동안 대상의 크기를 두 배로 만들고 , 둘째 애니메이션은 2.5 초 동안
    • 대상을 다시 원래 크기로 되돌린다 . 둘째 애니메이션은 첫째 애니메이션이 끝나는 시점에서 시작한다 .
    • 주요 트위닝의 변환 네가지 –
    • 투명도 변경 (AlphaAnimation)
    • 회전 (RotateAnimation)
    • 비례 (ScaleAnimation)
    • 이동 (Translate)
  • 6. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 개념 ) 자원 파일에 정의 된 애니메이션을 코드에서 불러올 때에는 보조 클래스 AnimationUtils 를 사용한다 . 다음은 animationResourceID 에서 불러온 애니메이션을 green_rect 을 표시하는 ImageViewForTweening 에 적용하는 예이다 . 응용 프로그램이 애니메이션의 시작이나 종료 , 반복 같은 애니메이션 사건들에 반응하도록 만들 수도 있다 . 그러기 위해선 s AnimationListener 인터페이스의 적절한 콜백 메서드들을 구현해야 한다 .
  • 7. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 이론 ) - 1. AlphaAnimation( 투명도 변경 ) 알파 변환을 이용해서 애니메이션 투명도를 바꿀 수 있다 . 알파 변환은 대상을 서서히 보이게 보이지 않게 하거나 페이드인 / 페이드 아웃 여러 객체들을 화면에 겹치고자 할 때 유용하다 . 알파 값은 0.0( 완전 투명 – 안보임 ) ~ 1.0( 완전 불투명 – 보임 ) 지정 가능하다 . 알파 애니메이션의 주요 속성으로는 시작 투명도 fromAlpha 와 종료 투명도 toAlpha 가 있다 . 다음은 대상을 5 초간 “페이드 인” 하는 ( 완전 투명에서 완전 불투명으로 ) 투명도 변경 애니메이션을 정의하는 XML 자원 파일 . <alpha android:fromAlpha=“0.0” android:toAlpha=“1.0” android:duration=“5000”> </alpha> 코드에서는 android.view.animation 패키지의 AlphaAnimation 클래스를 이용해서 이와 동일한 애니메이션을 만들 수 있다 .
  • 8. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 1) - 1. AlphaAnimation( 투명도 변경 -1) /drawable/green_rect.xml /anim/transparency.xml ① ② ③
  • 9. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 1) - 1. AlphaAnimation( 투명도 변경 -2) ① ②
  • 10. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 이론 ) - 2. Scale Animation( 비례 변경 ) 비례 변환은 대상을 수직이나 수평으로 늘리거나 줄이는 것 . 비례 변환의 정도는 대상의 원래 길이 ( 너비 혹은 높이 ) 에 대한 비율로 설정 1.0 은 100%, 0.5 는 50% 를 의미 수평과 수직 비율을 각각 다르게 설정하는 것이 가능하며 , 대상의 종횡 비를 유지하려면 같게 설정해줘야 한다 . 설정해줘야 할 속성은 총 4 가지이며 , 비례변환에서도 변환의 중심축 x, y 를 설정할 수 있다 . 애니메이션 시작 비율 (fromXScale, fromYScale) 애니메이션 종료 비율 (toXScale, toYScale) 다음은 대상의 중심을 축으로 해서 5 초간 대상의 크기를 두배로 늘리는 비례 변환 애니메이션을 정의하는 XML 부분이다 . <scale android:pivotX=“50%” android:pivotY=“50%” android:fromXScale=“1.0” android:fromYScale=“1.0” android:toXScale=“2.0” android:toYScale=“2.0” android:duration=“5000” /> 코드에서는 android.view.animation 패키지의 ScaleAnimation 클래스를 이용해서 이와 동일한 애니메이션을 만들 수 있음 .
  • 11. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 1) - 2. Scale Animation( 비례 변경 ) ① ③ ② /anim/grow.xml ④
  • 12. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 이론 ) - 3. Translate( 이동 ) 이동 변환은 말 그대로 대상을 이동하는 것임 . 이동 변환을 위해서는 대상의 위치 변화를 정의하여야 한다 . 구체적으로 대상의 현재 위치에 상대적인 시작 위치와 현재 위치 에서 상대적인 목표 위치를 지정해야 한다 . 상대적인 시작 위치 (fromXDelta, fromYDelta) 상대적인 목표 위치 (toXDelta, toYDelta) 다음은 5 초간 대상을 Y 축을 따라 위쪽으로 ( 음의 방향 ) 100 픽셀 이동하는 변환을 정의한 XML 부분임 . fillAfter 를 true 로 설정하면 대상이 다시 원래의 위치로 돌아오지 않는다 . <translate android:toYDelta=“-100” android:fillAfter=“true” android:duration=“2500” /> 코드에서는 android.view.animation 패키지의 TranslateAnimation 클래스를 이용해서 이와 동일한 애니메이션을 만들 수 있다 .
  • 13. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 1) - Translate( 이동 ) ① ③ ② /anim/translate_position.xml ③ ④
  • 14. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 이론 ) - 4. Rotate Animation( 회 전 ) 회전 변환은 한 점을 중심으로 대상을 시계 방향 또는 반 시계 방향으로 돌리는 것이다 . 회전의 주요 속성은 시작 각도 fromDegrees 와 종료 각도 toDegrees 이다 . 회전 방향은 이 각도에 의해 암묵적으로 결정된다 . 예를 들어 대상 객체를 한 바퀴 돌린다고 할 때 , fromDegrees 를 0 도로 , toDegrees 를 360 로 설정하면 시계 방향으로 회전 되고 toDegrees 를 -360 로 설정하면 반 시계 방향으로 회전 된다 . 회전 축 ( 회전의 중심 좌표는 기본적으로 (0, 0), 즉 객체의 왼쪽 상단 모서리이다 . 이는 시계 바늘 같은 경우에 적합하다 . 그러나 객체 자신의 중심을 회전축으로 두어야 하는 경우가 더 많으므로 회전 축은 pivotX, pivitY 특성들로 정의 할 수 있다 . 이 특성들은 좌표 값 뿐만 아니라 퍼센트 값 ( 객체의 중심을 지정할 때 편하다 ) 도 허용한다 . 다음은 대상의 중심을 회전 축으로 하여 5 초간 대상을 시게 방향으로 완전히 한 바퀴 돌리는 회전 애니메이션 XML 부분임 . <rotate android:fromDegees=“0” android:toDegrees=“360” android:pivotX=“50%” android:pivotY=“50%” android:duration=“5000” /> 코드에서는 android.view.animation 패키지의 RotateAnimation 클래스를 이용해서 이와 동일한 애니메이션 구현 가능 .
  • 15. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 1) – 4. Rotate Animation( 회전 ) ① ③ ② /anim/sipn.xml ④
  • 16. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 1) – 4. Rotate Animation( 회전 ) ① ③ ② /anim/sipn.xml ④
  • 17. 2. 그래픽 – 비트맵 다루기 심화 기술
    • 다음은 이미지를 표시해 주는 레이아웃 ImageView 의 옵션 중 android:ScaleType 에 대한 설명이다 .
    • 이것은 ImageView 의 크기에 맞게 이미지의 크기를 조작하거나 이동시키는 옵션이다 .
    • Xml 에서는 표에서 나온 android:scaleType=“matrix” 로 표현하며 소스에서는
    • ImageView::setScaleType(ImageView.ScaleType.MATRIX) 로 구현된다 .
    • 이제 각가의 값들이 적용되는 예를 살펴보도록 하자 .
    • 그림에서 ImageView 의 틀을 보여주기 위해서 ImageView 의 Backgroud 값으로 Padding 값을 3 으로 줘서 조금 안쪽으로 당겨져 표현된다 .
    • MATRIX - ImageView 의 틀을 기준으로 해서 왼쪽 상단을 꼭지점으로 정렬 . 틀보다 작거나 커도 잘라져서 그대로 표현 .
    • FIT_XY – 이미지가 ImageView 를 보다 작거나 크든지 간에 이미지를 틀에 맞추는 것
    • FIT_START – 이미지크기를 틀에 맞게 비율을 줄이되 이미지 시작지점을 ImageView 왼쪽 상단에 맞추어 그림을 표현
    • FIT_CENTER – 이미지크기를 틀에 맞게 비율을 줄이되 ImageView 중앙에 맞추어 표현
    • FIX_END – 이미지크기를 틀에 맞게 비율을 줄이되 ImageView 의 오른쪽 아래에 맞추어 이미지를 표현한다 .
    • CENTER – ImageView 의 중앙에 위치시키는것
    • CENTER_CROP – 한쪽이 틀과 맞지 않다면 틀에 맞게 이미지를 늘이면서 다른 한쪽도 같이 비율에 맞게 증가시키는 것
    • CENTER_INSIDE – ImageView 의 틀에 벗어나는 쪽을 맞추어 비율을 줄여 표현
  • 18. 2. 그래픽 – 비트맵 다루기 심화 기술 Resiezed 객체 크기를 150, 250 에서 500, 500 으로 바꿔봅시다 (1) Matrix ImageView 의 틀을 기준으로 해서 왼쪽 상단을 꼭지점으로 정렬 . 틀보다 작거나 커도 잘라져서 그대로 표현 .
  • 19. 2. 그래픽 – 비트맵 다루기 심화 기술 (2) FIT_XY 원래 이미지 이미지가 ImageView 를 보다 작거나 크든지 간에 이미지를 틀에 맞추는 것
  • 20. 2. 그래픽 – 비트맵 다루기 심화 기술 (3) FIT_START , FIT_CENTER, FIT_END 이미지크기를 틀에 맞게 비율을 줄이되 이미지 시작지점을 ImageView 왼쪽 상단에 맞추어 그림을 표현 Resiezed 객체 크기를 350, 200 으로 바꿔봅시다 (4) FIT_CENTER 이미지크기를 틀에 맞게 비율을 줄이되 ImageView 중앙에 맞추어 표현 (5) FIT_END 이미지크기를 틀에 맞게 비율을 줄이되 ImageView 의 오른쪽 아래에 맞추어 이미지를 표현한다 .
  • 21. 2. 그래픽 – 비트맵 다루기 심화 기술 (6) CENTER 이미지크기 그대로 표현하되 이미지를 틀에 맞게 줄이지는 않는다 . 그리고 ImageView 틀의 중앙에 위치시킨다 . Padding 된 3px 크기의 여유 공간을 넘어가서 그대로 표현됨
  • 22. 2. 그래픽 – 비트맵 다루기 심화 기술 (7) CENTER_CROP 6 번에서의 그림은 높이가 ImageView 의 틀과 맞지 않다 . 이것처럼 한쪽이 틀과 맞지 않다면 틀에 맞게 이미지를 늘이면서 다른 한쪽도 같이 비율에 맞게 증가시킨다 . 그러면 6 번 그림은 높이가 증가한 비율만큼 넓이가 증가하여 표현되기 된다 . 그리고 그림의 위치는 틀의 중앙에서 표현된다 . Top 과 Bottom 의 Padding 된 3px 크기의 여유 공간은 보존된다 .
  • 23. 2. 그래픽 – 비트맵 다루기 심화 기술 (8) CENTER_INSIDE 7 번에서의 내용과 반대로 ImageView 의 틀에 벗어나는 쪽을 맞추어 비율을 줄여 표현한다 . 만약넓이가 틀에서 벗어난다면 넓이를 틀에 맞추고 그 비율만큼 높이를 줄이게 될 것이다 . CENTER_CROP, CENTER_INSIDE 는 ImageView 의 틀에 맞게 이미지를 조정하는 것이 공통적인 특징이다 . Padding 된 3px 크기의 여유 공간은 보존된다 .
  • 24. 1. 애니메이션 1-2. 트위닝 애니메이션 ( 실습 ) – 모든 효과 적용하는 애니메이션 구현