2017년 8월 8일 화요일

SoundPool & MediaPlayer

안드로이드 스튜디오에서 음향효과를 내는 방법은 두가지가 있습니다. SoundPool을 이용하는 방법과 MediaPlayer을 쓰는 방법이 있습니다.
마찬가지로 자마린에서도 이 두 가지 방법을 사용할 수 있습니다. 이때 필요한 wav파일은 Resource폴더에 raw폴더를 만들어 넣는 것이 좋습니다.


다른 포멧의 음향파일(*.mp3 등)을 리소스로 등록할 수도 있을것 같은데, 제 경우에는 버전문제인지 컴파일이 안되더군요. 일단 wav파일을 넣고 실험해 봤습니다.

1. MediaPlayer
MediaPlayer를 이용해서 소리를 내는 간단한 예제입니다.

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Media;

namespace SoundEffect.Droid
{
    [Activity(Label = "SoundEffect.Android", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        MediaPlayer player1;
        MediaPlayer player2;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.myButton);

            // MediaPlayer객체를 만듦
            player1 = MediaPlayer.Create(this, Resource.Raw.cartoon_22);
            player2 = MediaPlayer.Create(this, Resource.Raw.CoinDrop);

            button.Click += delegate
            {
                button.Text = "Click!";

                // MediaPlayer 소리
                player1.Start();
                player2.Start();
                //player1.Stop();
                //player2.Stop();
            };
        }
    }
}

물론 MediaPlayer.Stop(), MediaPlayer.Pause() 등 여러 메소드가 있지만 이에 대해서는 다음 기회에 다루기로 하겠습니다.

2. SoundPool
이번에는 SoundPool 예제입니다.

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Media;

namespace SoundEffect.Droid
{
    [Activity(Label = "SoundEffect.Android", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        SoundPool pool;
        int soundID1;
        int soundID2;
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button>(Resource.Id.myButton);

            // SoundPool 객체 만들고 리소스 로드
            pool = new SoundPool(4, Stream.System, 0);
            soundID1 = pool.Load(this, Resource.Raw.cartoon_22, 1);
            soundID2 = pool.Load(this, Resource.Raw.CoinDrop, 1);
            // int변수 player1, player2로 제어

            button.Click += delegate
            {
                button.Text = "Click!";

                // 음향 출력
                int streamID1 = pool.Play(soundID1, 1, 1, 0, 0, 1);
                int streamID2 = pool.Play(soundID2, 1, 1, 0, 0, 1);
                //pool.Stop(streamID1);
                //pool.Stop(streamID2);
            };
        }
    }
}

SoundPool.Play()함수의 인수가 많은데, 각각의 인수는 다음과 같은 의미입니다.

int play (int soundID,         // Load함수에서 받아온 SoundID
          float leftVolume,    // 왼쪽 스피커 출력(0 ~ 1)
          float rightVolume,   // 오른쪽 스피커 출력(0 ~ 1)
          int priority,        // 우선순위 - 채널이 가득차면 가장 낮은 음향 제거
          int loop,            // 1 : 끝나면 처음부터 다시 실행, 0 : 한번만 실행
          float rate)          // 재생배율(2 : 2배 재생)

MediaPlayer가 wav파일 하나당 객체 하나를 만들어 관리하는데 비해, SoundPool은 많은 wav파일을 모아서 관리합니다. 그러므로 비교적 사용이 간단한 MediaPlayer에 비해 사용이 복잡하죠. Load시 SoundID를 받아 Play시 사용하며, Play시마다 streamID를 받아 소리를 멈추거나 끝내는데 사용해야 합니다.

MediaPlayer는 짧은 음향효과보다는 배경음악같은 긴 소리를 재생하는데 좋습니다. 실제로 짧은 소리를 MediaPlayer로 반복, 중복재생하면 오동작하는 경우가 종종 있습니다.
반면 SoundPool은 짧은 사운드이펙트를 구현하는데 적당하죠.

2017년 5월 10일 수요일

RGB 색상정보

펌 : RGB 색상정보


■■■■■■■■■■■■ ← maroon. rgb(128, 0, 0). #800000.
■■■■■■■■■■■■ ← dark red. rgb(139, 0, 0). #8b0000. 어두운 빨강. ‘암적색’.
■■■■■■■■■■■■ ← redrgb(255, 0, 0)#ff0000. 빨강. ↑ 밝기가 어두워진다. 빛깔이 검정에 가까워진다. ↓ 밝아진다. 하양에 가까워진다.

■■■■■■■■■■■■ ← orange red. rgb(255, 69, 0). #ff4500.
■■■■■■■■■■■■ ← rgb(255, 102, 0). 090719일1109.
■■■■■■■■■■■■ ← #ff6600. 090926토0727.
■■■■■■■■■■■■ ← dark orange. rgb(255, 140, 0). #ff8c00. 어두운 귤. 어두운 주황.
■■■■■■■■■■■■ ← rgb(255, 153, 0). 090719일1931.
■■■■■■■■■■■■ ← #ff9900. 090720월1819.
■■■■■■■■■■■■ ← orange. rgb(255, 165, 0). #ffa500. 귤. ‘귤 색’. 주황.

■■■■■■■■■■■■ ← light coral. rgb(240, 128, 128). #f08080. 밝은 산호.
■■■■■■■■■■■■ ← indian red. rgb(205, 92, 92). #cd5c5c. 인디언 빨강. 인도인 빨강. 인도의 발강.
■■■■■■■■■■■■ ← rosy brown. rgb(188, 143, 143). #bc8f8f. 장미의 갈색. 장미빛의 갈색.
■■■■■■■■■■■■ ← fire brick. rgb(178, 34, 34). #b22222. 불 벽돌.
■■■■■■■■■■■■ ← brown. rgb(165, 42, 42). #a52a2a. ‘갈색’.

■■■■■■■■■■■■ ← tomato. rgb(255, 99, 71). #ff6347. 토마토.
■■■■■■■■■■■■ ← coral. rgb(255, 127, 80). #ff7f50. 산호.
■■■■■■■■■■■■ ← light salmon. rgb(255, 160, 122). #ffa07a. 밝은 연어.
■■■■■■■■■■■■ ← deep pink. rgb(255, 20, 147). #ff1493. 깊은 분홍.
■■■■■■■■■■■■ ← hot pink. rgb(255, 105, 180). #ff69b4. 뜨거운 분홍.
■■■■■■■■■■■■ ← light pink. rgb(255, 182, 193). #ffb6c1. 밝은 분홍.
■■■■■■■■■■■■ ← pink. rgb(255, 192, 203). #ffc0cb. 분홍. ‘분홍색’.

■■■■■■■■■■■■ ← salmon. rgb(250, 128, 114). #fa8072. 연어.
■■■■■■■■■■■■ ← crimson. rgb(237, 164, 61). #dc143c. 크림슨.
■■■■■■■■■■■■ ← dark salmon. rgb(233, 150, 122). #e9967a. 어두운 연어.
■■■■■■■■■■■■ ← burly wood. rgb(222, 184, 135). #deb887.
■■■■■■■■■■■■ ← pale violet red. rgb(219, 112, 147). #d87093.
■■■■■■■■■■■■ ← chocolate. rgb(210, 105, 30). #d2691e. 초컬릿.
■■■■■■■■■■■■ ← tan. rgb(210, 180, 140). #d2b48c.
■■■■■■■■■■■■ ← peru. rgb(205, 133, 63). #cd853f. 페루.

■■■■■■■■■■■■ ← medium violet red. rgb(199, 21, 133). #c71585.
■■■■■■■■■■■■ ← sienna. rgb(160, 82, 45). #a0522d. 씨에나.
■■■■■■■■■■■■ ← saddle brown. rgb(139, 69, 19). #8b4513. 안장 갈색.

■■■■■■■■■■■■ ← dark goldenrod. rgb(184, 134, 11). #b8860b.
■■■■■■■■■■■■ ← goldenrod. rgb(218, 165, 32). #daa520.
■■■■■■■■■■■■ ← pale goldenrod. rgb(238, 232, 170). #eee8aa.

■■■■■■■■■■■■ ← #ffcc00. 090926토0747.
■■■■■■■■■■■■ ← gold. gold. rgb(255, 215, 0). #ffd700. 금. 황금. ‘금색’. ‘황금색’.

■■■■■■■■■■■■ ← yellow. yellow. rgb(255, 255, 0). #ffff00. #ffff00. ← 밝기가 가장 밝다. 빛깔이 하양에 가장 가깝다. 노랑. ‘황색’.

■■■■■■■■■■■■ ← light yellow. rgb(255, 255, 224). #ffffe0. 밝은 노랑.
■■■■■■■■■■■■ ← light goldenrod yellow. light goldenrod yellow. rgb(250, 250, 210). #fafad2.

■■■■■■■■■■■■ ← olive. rgb(128, 128, 0). #808000. ‘감람색’.

■■■■■■■■■■■■ ← khaki. khaki. rgb(240, 230, 140). #f0e68c. ‘카키 색’.
■■■■■■■■■■■■ ← dark khaki. rgb(189, 183, 107). #bdb76b.
■■■■■■■■■■■■ ← dark olive green. rgb(85, 107, 47). #556b2f.
■■■■■■■■■■■■ ← olive drab. rgb(107, 142, 35). #6b8e23.
■■■■■■■■■■■■ ← yellow green. rgb(154, 205, 50). #9acd32. 노란 녹색. 황록색. ‘연두색’?
■■■■■■■■■■■■ ← #99cc00. 090808토2249.
■■■■■■■■■■■■ ← green yellow. rgb(173, 255, 47). #adff2f. 푸른 노랑. 푸르른 노랑. 녹황색. ‘연두색’?
■■■■■■■■■■■■ ← chartreuse. rgb(127, 255, 0). #7fff00.

■■■■■■■■■■■■ ← limergb(0, 255, 0)#00ff00. ← 밝기가 밝다. 빛깔이 하양에 가깝다.
■■■■■■■■■■■■ ← green. rgb(0, 128, 0). #008000. ‘녹색’. 초록색. 푸르름. 풀의 빛깔. 풀빛. 푸른. 풀빛의.
■■■■■■■■■■■■ ← dark green. rgb(0, 100, 0). #006400. 어두운 녹색. ‘암록색’.

■■■■■■■■■■■■ ← pale green. rgb(152, 251, 152). #98fb98. 창백한 녹색.
■■■■■■■■■■■■ ← light green. rgb(144, 238, 144). #90ee90. 밝은 녹색.
■■■■■■■■■■■■ ← lime green. rgb(50, 205, 50). #32cd32.
■■■■■■■■■■■■ ← forest green. rgb(34, 139, 34). #228b22. 숲 녹색.

■■■■■■■■■■■■ ← spring green. rgb(0, 255, 127). #00ff7f.
■■■■■■■■■■■■ ← medium spring green. rgb(0, 250, 154). #00fa9a.
■■■■■■■■■■■■ ← medium sea green. rgb(60, 179, 113). #3cb371. 중간 바다 녹색.
■■■■■■■■■■■■ ← rgb(51, 153, 102). 090719일1951.
■■■■■■■■■■■■ ← #339966. 090808토2259.
■■■■■■■■■■■■ ← sea green. rgb(46, 139, 87). #2e8b57. 바다 녹색.
■■■■■■■■■■■■ ← dark olive green. rgb(85, 107, 47). #556b2f. 어두운 올리브 녹색. 어두운 감람 녹색.

■■■■■■■■■■■■ ← cyan. rgb(0, 255, 255). #00ffff. 시안. cyan is equal to aqua. 시안과 아쿠아는 똑같다.
■■■■■■■■■■■■ ← aqua. rgb(0, 255, 255). #00ffff. 물. 아쿠아.
■■■■■■■■■■■■ ← dark cyan. rgb(0, 139, 139). #008b8b. 어두운 시안.
■■■■■■■■■■■■ ← teal. rgb(0, 128, 128). #008080. #008080.

■■■■■■■■■■■■ ← light cyan. rgb(224, 255, 255). #e0ffff. 밝은 시안.
■■■■■■■■■■■■ ← pale turquoise. rgb(175, 238, 238). #afeeee. 창백한 터키 석.

■■■■■■■■■■■■ ← aquamarine. rgb(127, 255, 212). #7fffd4. ‘아콰마린’. ‘애쿼머-인’. ‘남옥’. ‘藍玉’. ‘담청록색’. ‘담청록색의’.
■■■■■■■■■■■■ ← medium aquamarine. rgb(102, 205, 170). #66cdaa.

■■■■■■■■■■■■ ← turquoise. rgb(64, 224, 208). #40e0d0. ‘터키 석’.
■■■■■■■■■■■■ ← medium turquoise. rgb(72, 209, 204). #48d1cc.
■■■■■■■■■■■■ ← #33cccc. 090720월1807.
■■■■■■■■■■■■ ← dark turquoise. rgb(0, 206, 209). #00ced1. 어두운 터키 석.

■■■■■■■■■■■■ ← cadet blue. rgb(95, 158, 160). #5f9ea0.
■■■■■■■■■■■■ ← corn flower blue. rgb(100, 149, 237). #6495ed. 옥수수 꽃 파랑.

■■■■■■■■■■■■ ← light blue. rgb(173, 216, 230). #add8e6. 밝은 파랑.
■■■■■■■■■■■■ ← powder blue. rgb(176, 224, 230). #b0e0e6. 가루 파랑.
■■■■■■■■■■■■ ← sky blue. rgb(135, 206, 235). #87ceeb. 하늘 파랑.
■■■■■■■■■■■■ ← light sky blue. rgb(135, 206, 250). #87cefa. 밝은 하늘 파랑.

■■■■■■■■■■■■ ← azure. azure. rgb(240, 255, 255). #f0ffff.
■■■■■■■■■■■■ ← alice blue. alice blue. rgb(240, 248, 255). #f0f8ff. 앨리스 파랑.
■■■■■■■■■■■■ ← rgb(0, 204, 255). 090814금0811.
■■■■■■■■■■■■ ← deep sky blue. rgb(0, 191, 255). #00bfff. 깊은 하늘 파랑.
■■■■■■■■■■■■ ← dodger blue. rgb(30, 144, 255). #1e90ff.

■■■■■■■■■■■■ ← bluergb(0, 0, 255)#0000ff. 파랑. ‘청색’.
■■■■■■■■■■■■ ← ‘#3366ff’. 090716목1341.
■■■■■■■■■■■■ ← medium blue. rgb(0, 0, 205). #0000cd. 중간 파랑.
■■■■■■■■■■■■ ← dark blue. rgb(0, 0, 139). #00008b. 어두운 파랑. 암청색.
■■■■■■■■■■■■ ← navy. rgb(0, 0, 128). #000080.

■■■■■■■■■■■■ ← royal blue. rgb(65, 105, 225). #4169e1. 왕의 파랑. 왕가의 파랑. 왕의 가문의 파랑. 임금의 파랑.
■■■■■■■■■■■■ ← light steel blue. rgb(176, 196, 222). #b0c4de. 밝은 강 파랑. 밝은 강청색.
■■■■■■■■■■■■ ← steel blue. rgb(70, 130, 180). #4682b4. 강 파랑. 강철 파랑. 강청색.
■■■■■■■■■■■■ ← slate blue. rgb(106, 90, 205). #6a5acd. 점판암 파랑.
■■■■■■■■■■■■ ← medium slate blue. rgb(123, 104, 238). #7b68ee. 중간 점판암 파랑.
■■■■■■■■■■■■ ← dark slate blue. rgb(72, 61, 139). #483d8b. 어두운 점판암 파랑.

■■■■■■■■■■■■ ← midnight blue. rgb(25, 25, 112). #191970.

■■■■■■■■■■■■ ← blue violet. rgb(138, 43, 226). #8a2be2. 파란 제비꽃.
■■■■■■■■■■■■ ← medium purple. rgb(147, 112, 219). #9370d8.

■■■■■■■■■■■■ ← dark violet. rgb(148, 0, 211). #9400d3. 어두운 제비꽃.
■■■■■■■■■■■■ ← indigo. rgb(75, 0, 130). #4b0082. ‘쪽’. 쪽의 빛깔. ‘쪽빛’. ‘남색’.

■■■■■■■■■■■■ ← dark orchid. rgb(153, 50, 204). #9932cc.
■■■■■■■■■■■■ ← medium orchid. rgb(186, 85, 211). #ba55d3.
■■■■■■■■■■■■ ← orchid. rgb(218, 112, 214). #da70d6. ‘-ㄹ킫’. ‘난초’. 난초의 꽃. 난초 꽃. 연한 보라의 빛깔. 연한 보라의 빛깔의. ‘연보랏빛’. ‘연보랏빛의’.

■■■■■■■■■■■■ ← pale violet red. rgb(219, 112, 147). #d87093. 창백한 제비꽃 빨강.
■■■■■■■■■■■■ ← medium violet red. rgb(199, 21, 133). #c71585.

■■■■■■■■■■■■ ← lavender. lavender. rgb(230, 230, 250). #e6e6fa. lavender. 라벤더.
■■■■■■■■■■■■ ← lavender blush. lavender blush. rgb(255, 240, 245). #fff0f5.

■■■■■■■■■■■■ ← magenta. rgb(255, 0, 255). #ff00ff. 마젠타. magenta is equal to fuchsia. 마젠타와 푸크시아는 똑같다.
■■■■■■■■■■■■ ← fuchsia. rgb(255, 0, 255). #ff00ff. 푸크시아.
■■■■■■■■■■■■ ← dark magenta. rgb(139, 0, 139). #8b008b.
■■■■■■■■■■■■ ← purple. rgb(128, 0, 128). #800080. 보라. ‘가지 색’.

■■■■■■■■■■■■ ← violet. rgb(238, 130, 238). #ee82ee. 제비꽃. 보라. ↓ 밝기가 어두워진다. 빛깔이 검정에 가까워진다. ↑ 밝아진다. 하양에 가까워진다.
■■■■■■■■■■■■ ← plum. rgb(221, 160, 221). #dda0dd. 오얏. 자두. 한글말로는 오얏. 한자어로는 자두.
■■■■■■■■■■■■ ← thistle. thistle. rgb(216, 191, 216). #d8bfd8.

■■■■■■■■■■■■ ← black. rgb(0, 0, 0). #000000. 검정. ‘흑색’.

■■■■■■■■■■■■ ← dim gray. rgb(105, 105, 105). #696969. 침침한 회색.
■■■■■■■■■■■■ ← gray. grey. rgb(128, 128, 128). #808080. ‘회색’. 재의 빛깔. ‘잿빛’.
■■■■■■■■■■■■ ← rgb(150, 150, 150). 091005월0142.
■■■■■■■■■■■■ ← dark gray. rgb(169, 169, 169). #a9a9a9. 어두운 회색.
■■■■■■■■■■■■ ← silver. silver. rgb(192, 192, 192). #c0c0c0. ‘은색’.
■■■■■■■■■■■■ ← light gray. rgb(211, 211, 211). #d3d3d3. 밝은 회색.
■■■■■■■■■■■■ ← gainsboro. gainsboro. rgb(220, 220, 220). #dcdcdc.

■■■■■■■■■■■■ ← light slate gray. light slate gray. rgb(119, 136, 153). #778899. 밝은 점판암 회색.

■■■■■■■■■■■■ ← snow. snow. rgb(255, 250, 250). #fffafa. 눈.
■■■■■■■■■■■■ ← floral white. rgb(255, 250, 240). #fffaf0. 꽃의 하양.
■■■■■■■■■■■■ ← ivory. ivory. rgb(255, 255, 240). #fffff0. 상아.

■■■■■■■■■■■■ ← navajo white. rgb(255, 222, 173). #ffdead. 나바호 하양.

■■■■■■■■■■■■ ← antique white. rgb(250, 235, 215). #faebd7.
■■■■■■■■■■■■ ← ghost white. rgb(248, 248, 255). #f8f8ff. 유령 하양. 귀신 하양.

■■■■■■■■■■■■ ← white smoke. white smoke. rgb(245, 245, 245). #f5f5f5. white smoke. 하얀 연기.
■■■■■■■■■■■■ ← whitewhite. rgb(255, 255, 255). #ffffff. #ffffff. 하양. ‘백색’.

■■■■■■■■■■■■ ← misty rose. misty rose. rgb(255, 228, 225). #ffe4e1. 장미.
■■■■■■■■■■■■ ← sea shell. sea shell. rgb(255, 245, 238). #fff5ee. 바다 껍질.
■■■■■■■■■■■■ ← peach puff. peach puff. rgb(255, 218, 185). #ffdab9. 복숭아.
■■■■■■■■■■■■ ← bisque. bisque. rgb(255, 228, 196). #ffe4c4.
■■■■■■■■■■■■ ← blanched almond. blanched almond. rgb(255, 235, 205). #ffebcd. 아몬드.

■■■■■■■■■■■■ ← papaya whip. papaya whip. rgb(255, 239, 213). #ffefd5. 파파야.
■■■■■■■■■■■■ ← corn silk. corn silk. rgb(255, 248, 220). #fff8dc. 비단.
■■■■■■■■■■■■ ← lemon chiffon. lemon chiffon. rgb(255, 250, 205). #fffacd. 레몬. 구연.

■■■■■■■■■■■■ ← old lace. old lace. rgb(253, 245, 230). #fdf5e6.
■■■■■■■■■■■■ ← linen. linen. rgb(250, 240, 230). #faf0e6. 린넨.
■■■■■■■■■■■■ ← wheat. wheat. rgb(245, 222, 179). #f5deb3. 밀.

■■■■■■■■■■■■ ← beige. beige. rgb(245, 245, 220). #f5f5dc. 베이지. ‘베이지 색’.

■■■■■■■■■■■■ ← honey dew. honey dew. rgb(240, 255, 240). #f0fff0. 꿀 이슬.

■■■■■■■■■■■■ ← mint cream. mint cream. rgb(245, 255, 250). #f5fffa. 민트 크림.


출처: http://najsulman.tistory.com/439 [Nyaonge's Home]

2017년 1월 22일 일요일

Tip - 스트링 나누기

다음과 같은 긴 스트링이 있습니다. 여기서는 임시로 소스에 박아넣었지만, 원래는 Project A - Hello, Xamarin에 썻던 것처럼 리소스에 넣어야 합니다.

        private string longStr = "Xamarin 이란 C# 으로 구현된 소스를 이용하여 " +
                                 "Android/iOS/Windows 앱을 만들수 있도록 해주는 " +
                                 "Cross Platform 이다. 즉, C# 을 이용하여 하나의 " +
                                 "앱을 구현하고, 이를 Xamarin 을 이용하여 각 플랫폼에 " +
                                 "맞는 앱을 만들어내는것이다.";


이 글을 화면에 출력해 보려 합니다.

            Paint pen = new Paint();
            pen.Color = Color.Yellow;
            pen.TextSize = 25;
            canvas.DrawText(longStr, 50, 100, pen);


이와 같이 단순하게 출력해 보면 다음과 같이 나옵니다.



이 문장을 여러 줄에 걸쳐 출력하려면 어떻게 될까요?
시스템적으로 지원하지는 않는 것 같고, 일정 넓이로 잘라주는 코드를 만들어야 합니다.

이 일을 할 수 있는 것이 Android.Graphics.Paint의 메소드 BreakText()입니다.
BreakText()는 다음과 같은 형식을 가지고 있습니다.

        public virtual int BreakText(string text, bool measureForwards,
                                     float maxWidth, float[] measuredWidth);

        text : 잘라야 할 긴 문자열
        measureForwards : true면 앞에서 뒤로, false면 뒤에서 앞으로
        maxWidth : 잘라야 할 넓이
        measureWidth : null이 아닐 경우 실제 넓이 리턴(?)

        return value : 잘리는 위치

즉, 이 함수는 실제로 문자열을 자르는 것이 아니라 잘릴 위치를 찾아주는 함수입니다. 이 함수를 통해 실제로 문자열을 자르는 함수를 만들어야 하죠.

        private List StringDivide(Paint pen, string str, float width)
        {
            var rtn = new List();
            int endValue = 0;
            do
            {
                endValue = pen.BreakText(str, true, 200, null); // 자를 위치를 찾아
                endValue = Math.Min(endValue, str.Length);
                if (endValue > 0)
                {
                    rtn.Add(str.Substring(0, endValue));   // 잘라내서 리스트에 추가
                    str = str.Substring(endValue);         // 리스트에 추가된 부분을 잘라냄
                }
            } while (endValue > 0);
            return rtn;
        }


이것으로 다음과 같이 출력루틴을 바꾸면

            Paint pen = new Paint();
            pen.Color = Color.Yellow;
            pen.TextSize = 25;
            var strList = StringDivide(pen, longStr, 300);
            int y = 100;
            foreach (var str in strList)
            {
                canvas.DrawText(str, 50, y, pen);
                y += 30;
            }




저는 확장뷰를 사용하기에 나눠서 리스트로 만들었지만, Xamarin form을 사용할 때는 중간에 \n을 삽입하는 방식으로 해야 되겠죠.