본문 바로가기

Canvas

[Android] Make CustomView (TextView, OnMeasure) CustomView를 만들어 보고자 합니다.하고자 하는 것은 TextView Background 에 기본적으로 RoundRect 가 그려지도록 할 예정입니다. 여기서 필요한 기술이 두가지 입니다. 1. Background를 어떻게 그리지??2. CustomeView의 크기를 어떻게 조절하지??? 모든것을 설명해 드릴 수 없지만, 개발하는데 유용할 만한 내용은 될것이라 생각 됩니다. 먼저, Background에 이미지를 넣을때 아래와 같은 방법을 많이 씁니다. (전..그랬음.._) - FrameLayout으로 감싼 후, Background로 활용할 이미지를 ImageView에 먼저 그린 후 그 다음으로 위에 표현하고자 하는 View를 올린다. 단점 ) View의 크기가 고정 되어 있지 않으면 (예를 들어 .. 더보기
[ HTML5 ] Sin, Cos을 이용한 Vounce 이해 제5장 Circle Move Your browser does not support HTML5 Canvas. 위와 같이 벽면에서 Circle을 사용할려고 할 때, 입사각과 반사각을 구하게 된다. 이럴 때 사용하는 공식이 좌우 벽면 : 180 - angle 상하 벽면 : 360 - angle 위와 같은 공식을 사용하게 된다. ( 자세히 알고 싶으신 분은 위 Canvas 소스에 있으니 참고하세요.^^) 왜 저런 공식이 나오는 지 궁금해서 한번 조사해보았다. Cos Sin의 원리만 알면 간단했다. 위 그림을 보시면 연두색이 Cos 이며 빨간색은 Sin임을 알 수 있다. [ 원리 ] 1. 180도일 경우 Sin의 값은 동일하다. 2. 360도일 경우 Cos의 값은 동일하다. 하지만!! 3. 360도일 경우 Sin.. 더보기
[ HTML 5 ] Canvas Transform 출처: http://aslike.egloos.com/2898232 Canvas2D의 변환은 여타 3D API에서 제공하는 변환처럼 행렬로 처리된다 동차 좌표계를 포함 Canvas2D에 사용되는 행렬은 3 by 3 행렬이 된다. 변환 할 좌표를 x, y 라 하고, 최종 변환 된 좌표를 x', y' 이라고 했을 때, 변환 공식은 다음과 같다. 위쪽은 OpenGL을 많이 다뤄본 사람들에게 익숙한 행렬 곱 표현 방법이고 아래쪽은 DirectX를 많이 다뤄본 사람들에게 익숙한 행렬 곱 표현 방법이다 어느쪽이든 결과는 같다 눈치 빠른 사람은 눈치 챘으리라고 생각하지만 위 그림의 행렬에서 a, b, c, d, e, f는 위에서 설명한 함수 중 transform( a, b, c, d, e, f ) setTransfor.. 더보기
[ HTML5 ] Canvas를 이용하여 눈내리는 모션. 그렇게 좋은 내용은 아니고 참고만 하시면 될듯 합니다. 이미지 위로 눈이 내리는 효과를 내보았습니다. 움직임이 깔끔하지는 않지만, 참고용으로 보시면 나쁘지 않을 듯 합니다. Canvas resize, Gradation, 도형 그리기, shadow등 여러 기능을 이용했습니다. 이번엔 파일로 올리지만, 다음 부터 도메인으로 직접 링크 시켜 놓을 생각입니다. 그럼 오늘도 즐코딩하세요. 더보기
[Android] Bitmap에 그림 그리기. 항상 drawLine이나 drawCircle같은 함수를 매번 추가해야 할 경우, 혹시 For문으로 돌리고 계시지는 않는 지요? 그럼 시스템적으로 부화도 많이 생기고, 느려지는 것을 느낄 수 있습니다. Canvas 자체적으로 다시 초기화를 하지 않고,겹쳐서 그릴 경우에는 그대로 계속 그리면 되지만, 다시 깨끗하게 화면을 초기화 하고 다시 출력할려고 하면 다시 그 수만큼 사용을 해야하죠. for(int i = 0 ; i < 100 ; i++) c.drawLine(0,0,100,100,paint); 위와 같은 코드로는 drawLine을 100번 출력하게 되는 대박 코딩이 되는 거죠-0-;; 그래서 지금까지 그린 것을 Bitmap에 저장시켜 놓은 후, 그것을 다시 호출해서 사용하면 drawBitmap함수를 한번.. 더보기
[Android] HeapSize확인! Log.d("DEBUG", "Heap Size : "+Long.toString(Debug.getNativeHeapAllocatedSize())); 위 로그를 사용하여 매번 출력해줘서 HeapSize에 변화를 확인한다. 참고로 전 Sky VegaS를 테스트 해봤을 때, 결과값이 약140000000 이상이 될 경우 핸드폰이 멈춰버리는 현상이 발생하였습니다. HTC 디자이어 HD같은 경우는 그 전에 Out of memory가 발생하고 종료 되어버리구요. Bitmap을 사용하거나 리스트 배열에 이미지를 다룰 경우 주의사항! 1. Bitmap을 계속 사용하지 않을 경우에는 삭제한다. bitmap.recycle(); bitmap = null; 2. Bitmap을 불러들이는 부분이 매번 추가되지 않는지 확인한다. 특.. 더보기