'MiGong' 카테고리의 다른 글

2019.02.01 미공 데이터  (0) 2019.02.02
2019.01.29 미공 데이터  (0) 2019.01.30
2019.01.22 미공 데이터  (0) 2019.01.23
2019.1.16 미공 데이터  (0) 2019.01.16
2019.1.14 미공 데이터  (0) 2019.01.14
2019.01.12 미공 데이터  (0) 2019.01.12

하드코딩은 여러가지가 있지만 이 프로그램에서는 문자열을 class 의 필드로 바꿔주는 기능을 가지고 있습니다.

 

* 사용방법

1. 소스를 긁어서 붙여넣기 합니다.

2. Search 버튼을 클릭 합니다.

  Search 를 하면 왼쪽 목록에 문자열 목록이 나열됩니다.
  목록중 하나를 선택하면 소스의 해당 문자열 위치로 이동하여 표시됩니다. (밑줄, 굵게표시)
  여기에서 해당 사항이 아닌 항목은 del 키나 delete item 버튼으로 목록에서 제거 할수 있습니다.

 

3. ClassName 을 입력합니다.

   만들어질 class 의 명입니다.
   Prefix 는 필드명 앞에 붙여질 첨자입니다.

 

4. Make Field 버튼을 클릭합니다.

  목록의 내용을 가지고 class 생성 코드를 만들어 보여줍니다.

 

5. Change 버튼을 클릭합니다.

   만들어진 class 를 기준으로 문자열을 변경하여 보여줍니다.
   변경된 내용은 검은색 바탕의 횐색 글자로 보여집니다.

 

exe 파일

HardCodingAutoChanger.exe

 

소스

https://github.com/kjundev/HardCodingAutoChanger

 

window form 에서 unity 게임을 실행하는 소스입니다.

https://github.com/kjundev/WinFormUnity

 

winform

 

CefSharp

 

Animation Text 에 이어 Animation Button 입니다.

AnimationButton 으로 명명을 하지 않은 이유는 이쪽은 앞으로 여러가지 기능이 추가될 예정이기 때문입니다.

.NET Standard 에 클래스 추가후 아래와같이 코딩합니다.

버튼이 눌렸을때 살짝 작아졌다 다시 원래 크기로 돌아오는 에니메이션을 적용한 내용입니다.

using Xamarin.Forms;

namespace Test.Cntrol
{
    public class CustomButton : Button
    {
        public CustomButton() : base()
        {
            const int animationTime = 50;

            Clicked += async (sender, e) =>
            {
                var btn = (CustomButton)sender;
                await btn.ScaleTo(0.8, animationTime, Easing.SinOut);
                await btn.ScaleTo(1, animationTime, Easing.SinIn);
            };
        }
    }
}

 

 

이제 화면 Page 에서 컨트롤을 위치시킵니다.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Text"
             xmlns:cntrol="clr-namespace:Text.Cntrol"
             x:Class="Text.MainPage">

    <StackLayout Spacing="5">
        <Label Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" />
        <cntrol:AnimationText Text="Welcome to Xamarin.Forms" IsRunning="True" TextColor="Blue" HorizontalOptions="Center" Margin="0,15,0,15"/>
        <cntrol:CustomButton Text="Custom Button" WidthRequest="130" HeightRequest="40" HorizontalOptions="Center"
                             BackgroundColor="#81BE1D" CornerRadius="3" TextColor="White"/>

       
    </StackLayout>

</ContentPage>

 

아래는 결과 화면입니다.

Text 에 Animation 을 적용하여 글자가 순서대로 커졌다가 작아지는 효과를 주는 방법입니다.

.NET Standard 프로젝트에 클래스를 추가하여 아래와 같이 코딩합니다.

using Xamarin.Forms;

namespace Test.Cntrol
{
    public class AnimationText : StackLayout
    {
        private const string AnimationName = "AnimatedTextAnimation";

        public static readonly BindableProperty IsRunningProperty
            = BindableProperty.Create(nameof(IsRunning), typeof(bool), typeof(AnimationText), default(bool));

        public static readonly BindableProperty TextProperty
            = BindableProperty.Create(nameof(Text), typeof(string), typeof(AnimationText), default(string));

        private Animation animation;

        public AnimationText()
        {
            Orientation = StackOrientation.Horizontal;
            Spacing = -1;
        }

        public bool IsRunning
        {
            get => (bool)GetValue(IsRunningProperty);
            set => SetValue(IsRunningProperty, value);
        }

        public string Text
        {
            get => (string)GetValue(TextProperty);
            set => SetValue(TextProperty, value);
        }

        public Color TextColor { get; set; } = Color.Blue;

        protected override void OnPropertyChanged(string propertyName = null)
        {
            base.OnPropertyChanged(propertyName);

            if (propertyName == nameof(IsRunning) && IsEnabled)
            {
                if (IsRunning)
                {
                    StartAnimation();
                }
                else
                {
                    StopAnimation();
                }
            }

            if (propertyName == nameof(Text))
            {
                InitAnimation();
            }
        }

        private void InitAnimation()
        {
            this.animation = new Animation();
            Children.Clear();

            if (string.IsNullOrWhiteSpace(Text)) return;

            var index = 0;
            foreach (var textChar in Text)
            {
                var label = new Label
                {
                    Text = textChar.ToString(),
                    TextColor = this.TextColor,
                    FontAttributes = FontAttributes.Bold,
                    FontSize = 12
                };

                Children.Add(label);

                var oneCharAnimationLength = (double)1 / (Text.Length + 1);

                this.animation.Add(index * oneCharAnimationLength, (index + 1) * oneCharAnimationLength, 
                  new Animation(v => label.Scale = v, 1, 1.75, Easing.Linear));
                this.animation.Add((index + 1) * oneCharAnimationLength, (index + 2) * oneCharAnimationLength, 
                  new Animation(v => label.Scale = v, 1.75, 1, Easing.Linear));

                this.animation.Add(index * oneCharAnimationLength, (index + 1) * oneCharAnimationLength, 
                  new Animation(v => label.TranslationY = v, 0, -10, Easing.Linear));
                this.animation.Add((index + 1) * oneCharAnimationLength, (index + 2) * oneCharAnimationLength, 
                  new Animation(v => label.TranslationY = v, -10, 0, Easing.Linear));

                index++;
            }
        }

        private void StartAnimation()
        {
            animation.Commit(this, AnimationName, 16, (uint)Children.Count * 200, Easing.Linear, null, () => true);
        }

        private void StopAnimation()
        {
            this.AbortAnimation(AnimationName);
        }
    }
}

 

이제 Page 의 화면단에 아래와 같이 컨트롤을 위치시킵니다.

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:Test"
             xmlns:cntrol="clr-namespace:Test.Cntrol"
             x:Class="Test.MainPage">

    <StackLayout>
        <Label Text="Welcome to Xamarin.Forms!" HorizontalOptions="Center" />
        <cntrol:AnimationText Text="Welcome to Xamarin.Forms" IsRunning="True" HorizontalOptions="Center"/>
    </StackLayout>

</ContentPage>

아래는 실행결과 입니다.

안드로이드, iOS 모두 정상적으로 동작합니다.^^

 

 

 

 

요즘들어 자꾸 컴퓨터가 블루 스크린이 뜬다.

컴퓨터 부팅시 KMODE_EXCEPTION_NOT_HANDLED 에러가 발생되었는데

찾아보니 아래 처럼 인터넷 옵션에서 보호모드 사용을 꺼줘야 한다고 한다.

 

 

익스플로러를 켠상태에서 윈도우를 재시작 하면 익스플로러가 다시 켜지는데

그때 에러가 발생되는것 같다.

 

그런데 보호모드 사용을 꺼줘도 되는건지 모르겠다;';

미공은 미세먼지 공유하기의 줄임말로 개인이 가지고 있는 측정기 수치를 공유하는 어플입니다.

안드로이드 : https://play.google.com/store/apps/details?id=kr.kjun.MiGong

아이폰 : https://itunes.apple.com/kr/app/%EB%AF%B8%EA%B3%B5/id1419950526?mt=8

 

아래는 초기 화면으로 메뉴는 크게 4가지 입니다.

측정치공유하기 - 개인 측정기의 정보를 공유하는 메뉴입니다.

측정치게시판 - 공유한 정보를 확인하는 게시판 메뉴입니다.

미세먼지예보 - 미세먼지 예보 정보를 보여줍니다.

미세먼지사이트정보 - 사이트에서 제공하는 정보를 보여줍니다.

 

우측 상단의 카카오플러스 친구 버튼이 있으며 플러스 친구를 통해 중요한 공지는 발송됩니다.

https://pf.kakao.com/_KxoRxkC

 

1. 측정치공유하기

 

측정치를 공유하는 화면으로 주소를 동 기준으로 검색하여 주소를 설정하고

사용자 명과 기기명칭을 적고 기억하기를 합니다.

(기억하기를 하면 상단의 내용은 계속 고정됩니다.)

비밀번호는 나중에 게시물 수정/삭제시 사용됩니다.

수치(pm2.5 필수)를 적고 사진이 있다면 넣거나 찍습니다.

 

2. 측정치게시판

공유한 측정기 데이터가 리스트되어 보여집니다.

리스트된 항목을 클릭하면 아래와 같이 공유한 항목중 사진정보와 내용을 포함하여 확인할 수 있습니다.

사진을 클릭하면 확대하여 볼수 있습니다.

지도모양의 아이콘을 클릭하면 아래와 같이 지도에 현재 위치기준 개측기 수치정보와

기상청(AirKorea) 및 AirBox 데이터가 표시됩니다.

 

아래 처럼 개측기만 버튼을 누르면 개측기 데이터만 나타납니다.

시간 버튼을 클릭하면 해당 시간 이내 정보만 지도에 표시됩니다.

 

위치정보를 입력하고 검색하기를 하면 주소를 검색하여 지도에 표시합니다.

 

3. 미세먼지예보

 

미세먼지예보는 공공데이터에서 오늘 내일 모레 정보의 예보 정보를 나타내며

안양대 탭에서는 안양대(한국 대기질 예보시스템) 에서 제공하는 예보 정보를 보여줍니다.

 

4. 미세먼지사이트 정보 (nullschool, windy, aqicn, 에어코리아 사이트 정보)

실시간으로 미세먼지 위성 이미지 및 수치 정보를 나타내는 사이트를 보여줍니다.

 

기타..

랭킹보기 메뉴

공유한 사용자에대한 공유 횟수 정보가 표시됩니다.

 

사이드메뉴구성은 아래와 같습니다.

 

정보 업데이트를 선택하면 구글플레이/AppStore 로 이동합니다.

(실시간 수치는 개발중..)

아래는 홈화면입니다.

우측 상단의 종모양 이미지를 클릭하면 공지사항이 표시됩니다.

구글맵 적용전 apk 파일

42.z01

42.zip

 

MissingMethod 에러가 발생되었다. 아래 에러와 같이..

!!0[] System.Array.Empty()

 

로컬에서 빌드한 dll 을 서버 pc 에 적용했는데 해당에러가 계속 발생되었다.

그래서 다른 메서드를 추가해 봤다 (인자가 없는) 그런데 그메서드는 잘 호출이 되었다.

아 이건 머지 하다가 혹시나해서 인자가 있는 메서드를 만들어 호출하니

위와 같은 에러가 발생되었다..

결론은 서버에 빌드한 dll 의 .NET 버전이 설치되어있지 않아서였다.

서버에 .NET 버전을 설치하던지 아니면 dll 빌드시 서버의 .NET 버전에 맞춰

빌드해야한다.

 

아래 링크는 서버의 .NET 버전을 확인하는 방법이다.

https://docs.microsoft.com/ko-kr/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed

자동으로되는건 아니고 우리카드
홈페이지에서 이벤트 페이지들어가서
응모하기 를 해야한다


아래는 상세 내용

1월 세금 납부 최대 1만원 청구할인


Event 1. 우리 개인 신용카드 지방세/국세 납부 혜택 (최대 1만원 청구할인)

• 기 간 : 2019년 1월 15일 (화) ~ 2019년 1월 31일 (목) 
*승인일 기준
• 대 상 : 우리 개인 신용카드 고객 (체크,법인,기프트카드 제외) 
* 응모필수 (응모 전후 이벤트 기간 내 납부한 금액 합산) 
• 납부대상 : 지방세 및 국세 등 세금 업종 
* 우리카드 가맹점 업종분류 기준
• 내 용 : 이벤트 응모 고객 중 1월 지방세/국세 세금 납부 시 
최대 1만원 청구할인 
(본인 회원 기준 1회, 가족카드 사용금액은 본인회원에 합산됨)

결제금액구간청구할인 금액10만원(누적) 이상5천원30만원(누적) 이상1만원

• 청구할인 제공일 : 고객 신용공여기간에 따라 익월 또는 익익월 카드대금 결제일 결제대금에서 차감 
• 유의사항
 - ATM,공과금기기로 납부시 신용카드 기능 (일시불,할부결제)을 이용한 결제금액만 해당됩니다. (현금카드/통장출금 기능 결제 제외)
 - 체크, 법인, 기프트카드는 대상에서 제외됩니다.
 - 본 이벤트는 응모한 고객에 한해 이용조건 충족 시 청구할인이 제공됩니다.
 - 청구할인은 매출 차감형식으로 결제하실 카드대금에서 차감됩니다.
 - 이용금액은 우리카드에 접수된 카드 승인금액이며, 본인회원을 기준으로 지급됩니다.(가족카드 사용분은 본인회원에 합산됩니다.)
 - 업종은 우리카드 가맹점 업종 분류 기준이 적용됩니다.
 - 청구할인 제공시점 탈회회원의 경우 혜택 제공이 제외됩니다.


Event 2. 우리 개인 신용카드 국세 납부 시 2~3개월 무이자 할부

• 기 간 : 2019년 1월 16일 (수) ~ 2019년 1월 31일 (목) 
• 대 상 : 우리 개인 신용카드 고객 (체크,법인,기프트카드 제외) 
• 납부대상 : 국세 
• 내 용 : 우리 신용카드로 국세 5만원 이상 납부 시 무이자 할부 2 ~ 3개월 제공 (*지방세 납부 제외)
• 유의사항
 - 체크, 법인, 기프트 카드는 대상에서 제외됩니다.
 - 지방세 납부는 제외됩니다. 
 - 일부 상품에 따라 무이자 할부 이용 시 상품에서 제공하는 포인트 또는 마일리지 적립제외, 카드실적 산정 및 할인 적용 제외될 수 있습니다

+ Recent posts