SlideShare a Scribd company logo
1 of 20
0.  그래픽과 애니메이션 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
0.  그래픽과 애니메이션 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1.  화면에 그래픽 등록 1-0.  화면에 그래픽을 등록해보자 화면에 뭔가를 그리려면 유효한  Canvas 가 있어야 하므로 보통은 으용프로그램을 위한 커스텀 뷰 (View  파생클래스 ) 를 만들고 그 뷰의  onDraw()  메서드를 구현함으로써 유효한  Canvas 를 얻는다 .  ViewWithRedDot 이라는 간단한  View  하위 클래스를 만들어서  onDraw()  메서드로 뷰의 모습을 결정해보자 . - Activity  클래스의  onCreate() 에서 이 뷰를 활동의 화면으로 설정  - 등록 <  결과화면  >
1.  화면에 그래픽 등록 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
1.  화면에 그래픽 등록 1-1. LinearGradient 위쪽 원이 선형 그래디언트가 적용된 것이다 . ( 빨간 색에서 검은 색 ,  반사 적용됨 ) 등록 <  결과화면  >
1.  화면에 그래픽 등록 1-2. RadialGradient 작은 원이 방사상 그래디언트가 적용된 것이다 . ( 녹색에서 검은색으로 ) 등록 <  결과화면  >
1.  화면에 그래픽 등록 1-3. SweepGradient 아래쪽 원이 쓸기 그래디언트가 적용된 것이다 . ( 빨강 ,  노랑 ,  녹색 ,  파랑 ,  주황으로 변한다 ) 등록 <  결과화면  >
2.  비트맵 이미지 다루기 Android.graphics  패키지에는 비트맵 이미지들에 관련된 수많은 편의 수단들이 들어있다 . 비트맵을 다루는데 있어 핵심적인 클래스는  android.graphics.Bitmap  이다 . 그리고 객체  Factory  관리를 위한  BitmapFactory  클래스가 있다 . BitmapFactory 는 여러가지 이미지 포맷을  decode  해서  Bitmpa 으로 변환하는 함수들로 되어 있는데 그 이름들은  decodeXXX  로 되어 있어서 쉽게 원하는 기능의 함수들을 찾을 수 있다 . 1. Canvas 에 비트맵 이미지 그리기 BitmapFactory.decodeResource() – Resource  폴더에 저장된 그림파일을  Bitmap 으로 만들어 리턴해준다 . 객체명 .drawBitmap() –  캔버스 객체에 해당  Bitmap  객체를 그려준다 . 2.  비트맵 이미지의 확대 ,  축소 Bitmap.createScaledBitmap( 객체명 ,  크기 ,  크기 ,  옵션 ) –  비트맵 이미지의 확대 축소 +  비트맵 이미지의 종횡 비를 유지하고 싶다면  getWidth() 와  getHeight 로 너비 ,  높이를 얻고 그에 따른 비례비율을 조절해야 함 .  3.  변환 행렬을 이용한 비트맵 변환 Matrix 를 클래스를 이용하여  Bitmap  객체를 다양한 방식으로 변환 할 수 있다 . MirrorMatrix.preScale(x  축 ,  y 축  ) –  반사되는 이미지 축 객체명 .preRotate( 각도크기 ) –  이미지 회전 4.  메모리 해제 다 사용한  Bitmap  객체는  recycle()  메서드를 호출해서 비트맵이 사용하던 메모리를 해제해 주는 것이 좋다 . 객체명 .recycle();
2.  비트맵 이미지 다루기 2-1. Canvas 에 비트맵 이미지 그리기 캔버스에 비트맵 이미지를 그리는 기본적인 방법은  View 의  onDraw()  메서드 안에서 여러  drawBitmap()  메서드들 중 하나를 사용하는 것 . <  결과화면  >
2.  비트맵 이미지 다루기 2-2.  비트맵 이미지의 확대 ,  축소 이미지를 실제 크기보다 더 크게 또는 작게 그려야 할 때도 있다 .  그런 경우에는  createScaledBitmap()  메서드를 사용하면 됨  메서드 안에 들어가는 값은  ( 객체명 , x 축 확대크기 , y 축 확대크기 ,  비트맵  or  안티앨리언싱 모드 )  <  결과화면  >
2.  비트맵 이미지 다루기 3.  변환 행렬을 이용한 비트맵 변환 Matrix 를 클래스를 이용하여  Bitmap  객체를 다양한 방식으로 변환 할 수 있다 . 다음은  createBitmap()  메서드에 적절한 반사 (mirror)  변환 행렬을 적용해서 ,  원본 비트맵 ( 앞에서 생상한  pic) 의 좌우가 뒤집힌 Bitmap  객체를 생성 및 반사와 함께 회전하는 객체를 설정하는 예이다 . <  결과화면  >
3.  도형 다루기 직사각형이나 원 같은 기본 도형들을 직접 정의해서 캔버스에 그리는 것도 가능하다 . ShapeDrawable  클래스와  Shape 의 여러 파생 클래스들을 이용하면 되는데 , XML  자원 파일에서  PaintDrawable  표시물을 정의해 도형을 만들 수도 있지만 ,  어느 정도 복잡한 도형들은 코드에서 직접 정의하는 것이 일반적이다 . 1.  도형 표시물을  XML  자원으로 정의하기 (1)  원 ,  혹은 직사각형 같은 기본 도형들을 사용하기 위해서는  /res/drawable/  디렉터리에  XML  자원 파일을 생성하여 만들어야 한다 . (2)  다음은 이 도형자원을 코드에 적재한다 . (3)  마지막으로 그것을  main.xml  혹은 사용하고자 하는  xml  파일의  ImageView  위젯에 표시한다 . 2.  도형 표시물을 코드에서 직접 정의하기 도형 표시물을 코드에서 정의하려면 특정 도형 클래스 (android.graphics.drawable.shapes  에 다양한 도형클래스가 있음 ) 의 인스턴스를 인수로 해서  ShapeDrawable  객체를 생성해야 한다 .  (1)  코드에  ShapeDrawable  객체 생성한 뒤 옵션을 셋팅한다 ( 색깔 등 ) (2) ImageView 에 설정하면 된다 .
3.  도형 다루기 3-1.  도형 표시물을  XML  자원으로 정의하기 생성 < 코드 > <main.xml> <Green_rect.xml> <  결과화면  >
3.  도형 다루기 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
3.  도형 다루기 3-2.  도형 표시물을 코드에서 직접 정의하기 3-2-1.  직사각형 및 정사각형 <  결과화면  >
3.  도형 다루기 3-2.  도형 표시물을 코드에서 직접 정의하기 3-2-2.  동근 모서리 직사각형 그리기 <  결과화면  >
3.  도형 다루기 3-2.  도형 표시물을 코드에서 직접 정의하기 3-2-3.  내부가 비어 있는 동근 모서리 직사각형 그리기 <  결과화면  >
3.  도형 다루기 3-2.  도형 표시물을 코드에서 직접 정의하기 3-2-4.  타원과 원 그리기 OvalShape  자체에는 크기 속성들이 없다 .  타원의 크기는  OvalShape 가 담긴 컨테이너 ( 현재는  ShapeDrawable) 에 의해 결정됨 색상 등의 일부 속성들은  ShapeDrawable 의  Paint  객체를 얻어 그  Paint  객체의 메서드로 설정해야 한다 . <  결과화면  >
3.  도형 다루기 3-2.  도형 표시물을 코드에서 직접 정의하기 3-2-5.  원호 그리기 팩맨이나 파이 그래프 같은 원호 (arc)  도형은  ArcShpae  객체를 인수로 주어서 생상한  ShapeDrawable 에 해당한다 . ArcShape 의 생성자는 원호의 시작각도를 결정하는 매개변수  startAngle 과 반지름 선분이 쓸고가는 각도를 결정하는 매개변수  sweepAnagle 을 받는다 . Startangle 은 세시방향 ( 양의  X 축 ) 이 기준이다 . sweepAngle 이 양수이면 시계방향 음수이면 반시계방향으로 만들어진다 . 0 과  360 으로 설정하면 원이 된다 . <  결과화면  >
3.  도형 다루기 3-2.  도형 표시물을 코드에서 직접 정의하기 3-2-6.  경로 도형 그리기 이상의 기본 도형들에 해당하지 않는 비정형 도형을 만들고 싶다면 일련의 직선 ,  곡선 선분들로 도형의 외곽선을 직접 정의해야 한다 . 그러한 도형을 만드는 데 사용할 수 있는 것이 “경로”를 나타내는  android.graphics.Path 이다 . <  결과화면  >

More Related Content

Viewers also liked

Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)
xenoby
 
Arakawa bosc2010 g-languate_bookmarklet
Arakawa bosc2010 g-languate_bookmarkletArakawa bosc2010 g-languate_bookmarklet
Arakawa bosc2010 g-languate_bookmarklet
BOSC 2010
 

Viewers also liked (20)

Horrible_jobs
Horrible_jobsHorrible_jobs
Horrible_jobs
 
How students in H.E. use their mobile phones for learning
How students in H.E. use their mobile phones for learningHow students in H.E. use their mobile phones for learning
How students in H.E. use their mobile phones for learning
 
What is ineighbourtv?
What is ineighbourtv?What is ineighbourtv?
What is ineighbourtv?
 
4 scenarios voor de toekomst van bibliotheken
4 scenarios voor de toekomst van bibliotheken4 scenarios voor de toekomst van bibliotheken
4 scenarios voor de toekomst van bibliotheken
 
Latest trends in em
Latest trends in emLatest trends in em
Latest trends in em
 
Fotosdesdeelcielo J L
Fotosdesdeelcielo  J LFotosdesdeelcielo  J L
Fotosdesdeelcielo J L
 
Economic and Policy Impacts of Climate Change
Economic and Policy Impacts of Climate ChangeEconomic and Policy Impacts of Climate Change
Economic and Policy Impacts of Climate Change
 
United Way of Greater Toledo SEM Presentation
United Way of Greater Toledo SEM PresentationUnited Way of Greater Toledo SEM Presentation
United Way of Greater Toledo SEM Presentation
 
Take Your Small Business Global
Take Your Small Business GlobalTake Your Small Business Global
Take Your Small Business Global
 
1.2 Wesley Gee
1.2 Wesley Gee1.2 Wesley Gee
1.2 Wesley Gee
 
Portfolio 2007
Portfolio 2007Portfolio 2007
Portfolio 2007
 
Math That Matters
Math That MattersMath That Matters
Math That Matters
 
Как стать информационным продюсером
Как стать информационным продюсеромКак стать информационным продюсером
Как стать информационным продюсером
 
Dandy food13
Dandy food13Dandy food13
Dandy food13
 
Ussba cat
Ussba catUssba cat
Ussba cat
 
Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)Conflux: GPGPU для .NET (ADD`2010)
Conflux: GPGPU для .NET (ADD`2010)
 
Arakawa bosc2010 g-languate_bookmarklet
Arakawa bosc2010 g-languate_bookmarkletArakawa bosc2010 g-languate_bookmarklet
Arakawa bosc2010 g-languate_bookmarklet
 
Introduction of Deferred Prosecution Agreements in the UK in 2014
Introduction of Deferred Prosecution Agreements in the UK in 2014Introduction of Deferred Prosecution Agreements in the UK in 2014
Introduction of Deferred Prosecution Agreements in the UK in 2014
 
Fundación Coca-Cola compartió la magia de ser niño este Día de Reyes
Fundación Coca-Cola compartió la magia de ser niño este Día de ReyesFundación Coca-Cola compartió la magia de ser niño este Día de Reyes
Fundación Coca-Cola compartió la magia de ser niño este Día de Reyes
 
Challenges To Ertms In Europe
Challenges To Ertms In EuropeChallenges To Ertms In Europe
Challenges To Ertms In Europe
 

Similar to 안드로이드스터디 7

안드로이드스터디 11
안드로이드스터디 11안드로이드스터디 11
안드로이드스터디 11
jangpd007
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730
Yong Joon Moon
 
25장 레거시코드활용전략 전반부 박진호
25장 레거시코드활용전략 전반부 박진호25장 레거시코드활용전략 전반부 박진호
25장 레거시코드활용전략 전반부 박진호
jinho park
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
Jong-hyun Park
 
[0602 박민근] direct2 d
[0602 박민근] direct2 d[0602 박민근] direct2 d
[0602 박민근] direct2 d
MinGeun Park
 

Similar to 안드로이드스터디 7 (20)

안드로이드스터디 11
안드로이드스터디 11안드로이드스터디 11
안드로이드스터디 11
 
5-1. html5 graphics
5-1. html5 graphics5-1. html5 graphics
5-1. html5 graphics
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
 
Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730Matplotlib 기초 이해하기_20160730
Matplotlib 기초 이해하기_20160730
 
[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑[0918 박민수] 범프 매핑
[0918 박민수] 범프 매핑
 
이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념이펙트 쉐이더 1강 - Shader 기초 개념
이펙트 쉐이더 1강 - Shader 기초 개념
 
25장 레거시코드활용전략 전반부 박진호
25장 레거시코드활용전략 전반부 박진호25장 레거시코드활용전략 전반부 박진호
25장 레거시코드활용전략 전반부 박진호
 
Shader Driven
Shader DrivenShader Driven
Shader Driven
 
Html5 소개 가이드
Html5 소개 가이드Html5 소개 가이드
Html5 소개 가이드
 
셰이더 만들기 실습
셰이더 만들기 실습셰이더 만들기 실습
셰이더 만들기 실습
 
파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기파이어몽키 3D 애플리케이션 만들기
파이어몽키 3D 애플리케이션 만들기
 
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
[QGIS] 수치지도를 이용한 DEM 생성과 지형분석
 
Java, android 스터티8
Java, android 스터티8Java, android 스터티8
Java, android 스터티8
 
[0602 박민근] direct2 d
[0602 박민근] direct2 d[0602 박민근] direct2 d
[0602 박민근] direct2 d
 
모바일 앱 프로그래밍 2015-2019년 출석수업대체시험
모바일 앱 프로그래밍 2015-2019년 출석수업대체시험모바일 앱 프로그래밍 2015-2019년 출석수업대체시험
모바일 앱 프로그래밍 2015-2019년 출석수업대체시험
 
[0129 박민근] direct x2d
[0129 박민근] direct x2d[0129 박민근] direct x2d
[0129 박민근] direct x2d
 
이미지와 애니메이션 효과 적용하기
이미지와 애니메이션 효과 적용하기이미지와 애니메이션 효과 적용하기
이미지와 애니메이션 효과 적용하기
 
Html5 canvas sprite animation
Html5 canvas sprite animationHtml5 canvas sprite animation
Html5 canvas sprite animation
 
이정근_project_로봇비전시스템.pdf
이정근_project_로봇비전시스템.pdf이정근_project_로봇비전시스템.pdf
이정근_project_로봇비전시스템.pdf
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorial
 

More from jangpd007

자바스터디 4
자바스터디 4자바스터디 4
자바스터디 4
jangpd007
 
자바스터디 3 3
자바스터디 3 3자바스터디 3 3
자바스터디 3 3
jangpd007
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2
jangpd007
 
자바스터디 3 1
자바스터디 3 1자바스터디 3 1
자바스터디 3 1
jangpd007
 
자바스터디 2
자바스터디 2자바스터디 2
자바스터디 2
jangpd007
 
자바스터디 1
자바스터디 1자바스터디 1
자바스터디 1
jangpd007
 
안드로이드스터디 14
안드로이드스터디 14안드로이드스터디 14
안드로이드스터디 14
jangpd007
 
안드로이드스터디 13
안드로이드스터디 13안드로이드스터디 13
안드로이드스터디 13
jangpd007
 
안드로이드스터디 12
안드로이드스터디 12안드로이드스터디 12
안드로이드스터디 12
jangpd007
 
안드로이드스터디 10
안드로이드스터디 10안드로이드스터디 10
안드로이드스터디 10
jangpd007
 
안드로이드스터디 9
안드로이드스터디 9안드로이드스터디 9
안드로이드스터디 9
jangpd007
 
안드로이드스터디 8
안드로이드스터디 8안드로이드스터디 8
안드로이드스터디 8
jangpd007
 
안드로이드스터디 6
안드로이드스터디 6안드로이드스터디 6
안드로이드스터디 6
jangpd007
 
안드로이드스터디 5
안드로이드스터디 5안드로이드스터디 5
안드로이드스터디 5
jangpd007
 
안드로이드스터디 4
안드로이드스터디 4안드로이드스터디 4
안드로이드스터디 4
jangpd007
 
안드로이드스터디 3
안드로이드스터디 3안드로이드스터디 3
안드로이드스터디 3
jangpd007
 
안드로이드스터디 2
안드로이드스터디 2안드로이드스터디 2
안드로이드스터디 2
jangpd007
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
jangpd007
 

More from jangpd007 (18)

자바스터디 4
자바스터디 4자바스터디 4
자바스터디 4
 
자바스터디 3 3
자바스터디 3 3자바스터디 3 3
자바스터디 3 3
 
자바스터디 3 2
자바스터디 3 2자바스터디 3 2
자바스터디 3 2
 
자바스터디 3 1
자바스터디 3 1자바스터디 3 1
자바스터디 3 1
 
자바스터디 2
자바스터디 2자바스터디 2
자바스터디 2
 
자바스터디 1
자바스터디 1자바스터디 1
자바스터디 1
 
안드로이드스터디 14
안드로이드스터디 14안드로이드스터디 14
안드로이드스터디 14
 
안드로이드스터디 13
안드로이드스터디 13안드로이드스터디 13
안드로이드스터디 13
 
안드로이드스터디 12
안드로이드스터디 12안드로이드스터디 12
안드로이드스터디 12
 
안드로이드스터디 10
안드로이드스터디 10안드로이드스터디 10
안드로이드스터디 10
 
안드로이드스터디 9
안드로이드스터디 9안드로이드스터디 9
안드로이드스터디 9
 
안드로이드스터디 8
안드로이드스터디 8안드로이드스터디 8
안드로이드스터디 8
 
안드로이드스터디 6
안드로이드스터디 6안드로이드스터디 6
안드로이드스터디 6
 
안드로이드스터디 5
안드로이드스터디 5안드로이드스터디 5
안드로이드스터디 5
 
안드로이드스터디 4
안드로이드스터디 4안드로이드스터디 4
안드로이드스터디 4
 
안드로이드스터디 3
안드로이드스터디 3안드로이드스터디 3
안드로이드스터디 3
 
안드로이드스터디 2
안드로이드스터디 2안드로이드스터디 2
안드로이드스터디 2
 
안드로이드스터디 1
안드로이드스터디 1안드로이드스터디 1
안드로이드스터디 1
 

안드로이드스터디 7

  • 1.
  • 2.
  • 3. 1. 화면에 그래픽 등록 1-0. 화면에 그래픽을 등록해보자 화면에 뭔가를 그리려면 유효한 Canvas 가 있어야 하므로 보통은 으용프로그램을 위한 커스텀 뷰 (View 파생클래스 ) 를 만들고 그 뷰의 onDraw() 메서드를 구현함으로써 유효한 Canvas 를 얻는다 . ViewWithRedDot 이라는 간단한 View 하위 클래스를 만들어서 onDraw() 메서드로 뷰의 모습을 결정해보자 . - Activity 클래스의 onCreate() 에서 이 뷰를 활동의 화면으로 설정 - 등록 < 결과화면 >
  • 4.
  • 5. 1. 화면에 그래픽 등록 1-1. LinearGradient 위쪽 원이 선형 그래디언트가 적용된 것이다 . ( 빨간 색에서 검은 색 , 반사 적용됨 ) 등록 < 결과화면 >
  • 6. 1. 화면에 그래픽 등록 1-2. RadialGradient 작은 원이 방사상 그래디언트가 적용된 것이다 . ( 녹색에서 검은색으로 ) 등록 < 결과화면 >
  • 7. 1. 화면에 그래픽 등록 1-3. SweepGradient 아래쪽 원이 쓸기 그래디언트가 적용된 것이다 . ( 빨강 , 노랑 , 녹색 , 파랑 , 주황으로 변한다 ) 등록 < 결과화면 >
  • 8. 2. 비트맵 이미지 다루기 Android.graphics 패키지에는 비트맵 이미지들에 관련된 수많은 편의 수단들이 들어있다 . 비트맵을 다루는데 있어 핵심적인 클래스는 android.graphics.Bitmap 이다 . 그리고 객체 Factory 관리를 위한 BitmapFactory 클래스가 있다 . BitmapFactory 는 여러가지 이미지 포맷을 decode 해서 Bitmpa 으로 변환하는 함수들로 되어 있는데 그 이름들은 decodeXXX 로 되어 있어서 쉽게 원하는 기능의 함수들을 찾을 수 있다 . 1. Canvas 에 비트맵 이미지 그리기 BitmapFactory.decodeResource() – Resource 폴더에 저장된 그림파일을 Bitmap 으로 만들어 리턴해준다 . 객체명 .drawBitmap() – 캔버스 객체에 해당 Bitmap 객체를 그려준다 . 2. 비트맵 이미지의 확대 , 축소 Bitmap.createScaledBitmap( 객체명 , 크기 , 크기 , 옵션 ) – 비트맵 이미지의 확대 축소 + 비트맵 이미지의 종횡 비를 유지하고 싶다면 getWidth() 와 getHeight 로 너비 , 높이를 얻고 그에 따른 비례비율을 조절해야 함 . 3. 변환 행렬을 이용한 비트맵 변환 Matrix 를 클래스를 이용하여 Bitmap 객체를 다양한 방식으로 변환 할 수 있다 . MirrorMatrix.preScale(x 축 , y 축 ) – 반사되는 이미지 축 객체명 .preRotate( 각도크기 ) – 이미지 회전 4. 메모리 해제 다 사용한 Bitmap 객체는 recycle() 메서드를 호출해서 비트맵이 사용하던 메모리를 해제해 주는 것이 좋다 . 객체명 .recycle();
  • 9. 2. 비트맵 이미지 다루기 2-1. Canvas 에 비트맵 이미지 그리기 캔버스에 비트맵 이미지를 그리는 기본적인 방법은 View 의 onDraw() 메서드 안에서 여러 drawBitmap() 메서드들 중 하나를 사용하는 것 . < 결과화면 >
  • 10. 2. 비트맵 이미지 다루기 2-2. 비트맵 이미지의 확대 , 축소 이미지를 실제 크기보다 더 크게 또는 작게 그려야 할 때도 있다 . 그런 경우에는 createScaledBitmap() 메서드를 사용하면 됨 메서드 안에 들어가는 값은 ( 객체명 , x 축 확대크기 , y 축 확대크기 , 비트맵 or 안티앨리언싱 모드 ) < 결과화면 >
  • 11. 2. 비트맵 이미지 다루기 3. 변환 행렬을 이용한 비트맵 변환 Matrix 를 클래스를 이용하여 Bitmap 객체를 다양한 방식으로 변환 할 수 있다 . 다음은 createBitmap() 메서드에 적절한 반사 (mirror) 변환 행렬을 적용해서 , 원본 비트맵 ( 앞에서 생상한 pic) 의 좌우가 뒤집힌 Bitmap 객체를 생성 및 반사와 함께 회전하는 객체를 설정하는 예이다 . < 결과화면 >
  • 12. 3. 도형 다루기 직사각형이나 원 같은 기본 도형들을 직접 정의해서 캔버스에 그리는 것도 가능하다 . ShapeDrawable 클래스와 Shape 의 여러 파생 클래스들을 이용하면 되는데 , XML 자원 파일에서 PaintDrawable 표시물을 정의해 도형을 만들 수도 있지만 , 어느 정도 복잡한 도형들은 코드에서 직접 정의하는 것이 일반적이다 . 1. 도형 표시물을 XML 자원으로 정의하기 (1) 원 , 혹은 직사각형 같은 기본 도형들을 사용하기 위해서는 /res/drawable/ 디렉터리에 XML 자원 파일을 생성하여 만들어야 한다 . (2) 다음은 이 도형자원을 코드에 적재한다 . (3) 마지막으로 그것을 main.xml 혹은 사용하고자 하는 xml 파일의 ImageView 위젯에 표시한다 . 2. 도형 표시물을 코드에서 직접 정의하기 도형 표시물을 코드에서 정의하려면 특정 도형 클래스 (android.graphics.drawable.shapes 에 다양한 도형클래스가 있음 ) 의 인스턴스를 인수로 해서 ShapeDrawable 객체를 생성해야 한다 . (1) 코드에 ShapeDrawable 객체 생성한 뒤 옵션을 셋팅한다 ( 색깔 등 ) (2) ImageView 에 설정하면 된다 .
  • 13. 3. 도형 다루기 3-1. 도형 표시물을 XML 자원으로 정의하기 생성 < 코드 > <main.xml> <Green_rect.xml> < 결과화면 >
  • 14.
  • 15. 3. 도형 다루기 3-2. 도형 표시물을 코드에서 직접 정의하기 3-2-1. 직사각형 및 정사각형 < 결과화면 >
  • 16. 3. 도형 다루기 3-2. 도형 표시물을 코드에서 직접 정의하기 3-2-2. 동근 모서리 직사각형 그리기 < 결과화면 >
  • 17. 3. 도형 다루기 3-2. 도형 표시물을 코드에서 직접 정의하기 3-2-3. 내부가 비어 있는 동근 모서리 직사각형 그리기 < 결과화면 >
  • 18. 3. 도형 다루기 3-2. 도형 표시물을 코드에서 직접 정의하기 3-2-4. 타원과 원 그리기 OvalShape 자체에는 크기 속성들이 없다 . 타원의 크기는 OvalShape 가 담긴 컨테이너 ( 현재는 ShapeDrawable) 에 의해 결정됨 색상 등의 일부 속성들은 ShapeDrawable 의 Paint 객체를 얻어 그 Paint 객체의 메서드로 설정해야 한다 . < 결과화면 >
  • 19. 3. 도형 다루기 3-2. 도형 표시물을 코드에서 직접 정의하기 3-2-5. 원호 그리기 팩맨이나 파이 그래프 같은 원호 (arc) 도형은 ArcShpae 객체를 인수로 주어서 생상한 ShapeDrawable 에 해당한다 . ArcShape 의 생성자는 원호의 시작각도를 결정하는 매개변수 startAngle 과 반지름 선분이 쓸고가는 각도를 결정하는 매개변수 sweepAnagle 을 받는다 . Startangle 은 세시방향 ( 양의 X 축 ) 이 기준이다 . sweepAngle 이 양수이면 시계방향 음수이면 반시계방향으로 만들어진다 . 0 과 360 으로 설정하면 원이 된다 . < 결과화면 >
  • 20. 3. 도형 다루기 3-2. 도형 표시물을 코드에서 직접 정의하기 3-2-6. 경로 도형 그리기 이상의 기본 도형들에 해당하지 않는 비정형 도형을 만들고 싶다면 일련의 직선 , 곡선 선분들로 도형의 외곽선을 직접 정의해야 한다 . 그러한 도형을 만드는 데 사용할 수 있는 것이 “경로”를 나타내는 android.graphics.Path 이다 . < 결과화면 >