devflow.kr@:~#

윈도우8의 작업관리자.

WINDOWS



[Windows 8 Pro (x64)버전의 작업관리자 간단히보기 상태]


Windows 8 부터는 작업관리자에 많은 변화가 있습니다.



[Windows 8 Pro (x64)버전의 작업관리자 자세히보기 상태]



그중 제가 몇일전에 포스팅했던 Svchost에 관한 매우 유용한 기능이 추가되었습니다.


즉, 현재 svchost(이제는 서비스호스트 라는 이름으로 보입니다)가 트리로 이루어져있어서,


간단하게 작업관리자 만으로도, 서비스를 확인 할 수 있습니다.



[작업관리자로 서비스 호스트 프로세스를 사용중인 서비스 목록]


또한 메모리, 디스크, 네트워크 등, 그동안은 따로 3rd프로그렘을 이용해서야만 볼 수 있었던, 프로세스에대한 자세한 사항을 지원하게 되었습니다.





물론 그 전의 방식그대로, 세부정보로 7처럼 프로세스의 목록을 볼 수 있습니다






개인적으로 서비스 호스트를 볼 수 있다는점과, 디스크 사용량을 볼 수 있음이 매우 마음에 듭니다.


C#으로 Javascript Injection BHO 만들어보기.

C/C++

이 포스트는 여기를 번역, 풀이하여 정리한 포스트입니다.

-


일단 BHO는 무었인가 하면, IE에서 사용하는 추가기능(Add-on)입니다. 어떻게 보면 Toolbar라고 할 수 있습니다.

BHO는 브라우저의 DocumentComplete, BeforeNavigate등.. Frame의 이벤트를 받을 수 있습니다.


이걸 이용해서, 모든 페이지나 특정 페이지에 Javascript를 inject하거나, 원하는 div를 삭제 등, 실질적으로 HTML이 렌더링 되어 보이기 전에 HTML의 내용을 변경 할 수 있습니다.


이 기능을 통해 imideo(http://www.imideo.com/) 기능 처럼 Javascript를 inject시켜서, 원하는 기능을 만들 수 있지요.


간단하게 C#으로 작성하는 법을 알려드리도록 하겠습니다.



일단 프로젝트를 새로만드는데, Windows->Class Library로 만듭니다.

그리고, IObjectWithSite의 사용을 위해, Microsoft Internet Explorer와 Microsoft HTML Object를 참조를 합니다.


그리고, 필요한 네임스페이스들을 import해줍니다.




그리고 IObjectWithSite의 인터페이스를 클래스위에 정의해줍니다.



이젠 IObjectWithSite의 인터페이스로 BHO 클라스를 만들어줍니다.





그리고 DocumentComplete 메서드에 아래처럼 Javascript를 inject하는 소스를 삽입합니다.





이렇게 기본적인 기능ㅇ르 하는 클래스는 완성이 되었습니다.

이젠 이 COM이 IE에서 동작하기 위한, 등록/해제의 기능을 넣어야합니다.





GUID를 얻어온 후 레지스트리에 등록합니다.

여기서 NoExplorer라는 값은, Windows Explorer에서 작동하지 않게, 즉 IE에서만 작동한다는 옵션입니다.


이런식으로 간단하게 만들어집니다.


단, regsvr32로 등록이 안되고, regasm을 이용해서 등록을 해야합니다.

컴파일한 .Net Framework와 동록할 regasm의 버전이 같아야 등록이 됩니다.





간단한 API 후킹으로 현재 작업 숨기기

REVERSING


제목은 거창하지만 간단하게 GetForegroundWindow()를 언제나 NULL로 반환하게 바꾸어주는 dll 과 exe입니다.


즉, 현재 맨앞의 윈도우의 핸들값을 NULL로 돌려주어 뭘 하는지 숨기는 기능(?)입니다.




hook_getfore.dll -  GetForegroundWindow 의 후킹에 관한 dll 파일입니다.

injector.exe - 간단하게 dll을 injection 하는 실행파일입니다.


사용법은 injector.exe [인젝션대상exe] [인잭션할dll파일] 입니다.  ex) injector.exe bitclt.exe hook_getfore.dll



모든 파일은 VC++ 2012로 작성되었습니다.



hook_getfore.dll


injector.exe


new 연산자를 가지는 클래스 만들어보기

C/C++

제가 가지고잇는 책에 따라 작성해보았습니다.


파일 입출력 - Part.1 : 파일 입력

C/C++




일단, 기본 스트림 입출력에 대해서는 모두 아실거라, (그래봤자 cin, cout... ..) 생각하고 파일입출력부터 하도록 하겠습니다.


일단, 헤더파일은 fstream.h 입니다.. 이 안에는 basic_ifsteam, basic_ostream 등이 확장되어있고, 이름에서부터 각 파일 입력과 출력을 해주는 역활을 합니다.


파일 입출력 연산은 스트림 입출력 메서드의 방식과 별반 차이가 없습니다,


그러한 이유는 파일입출력스트림은 기본 스트림 클래스에서 확장되어 만들어진 클래스이기 때문에 어렵지는 않습니다.


그럼 간단하게, 파일을 여는 법을 알아보도록 하겠습니다...




fsFile을 ifstream 객체로 선언한 후, open메서드로 file.txt 엽니다.

이렇게 파일을 읽어, 정상적으로 읽어 왔다면, 현재 파일 포인터는 파일의 맨 처음 시작부분입니다.

또 파일의 끝 즉 EOF가 true인지 확인 할때에는 eof 메서드를 이용하면 됩니다.




여담으로 안정성이 높고, 호환성이 높은 프로그램을 만들때는 모든 추측된 상황들을 처리해야 합니다.

즉, 파일 입출력할때에는, 파일이 정상적으로 열렸는지, 쓰였는지, 삭제되었는지, 크기가 올바른지 등..

을 체크를 해야 됩니다. 아래 예제를 보면서 파일의 읽는 과정에서, 오류들을 처리하는 방법을 보도록 합니다.





다음 파트에는 파일의 출력에 대해서 포스팅하겠습니다.




좌표가 원안에 있는지 체크하는 알고리즘

C/C++

친구 부탁으로 작성하게 되어 올려봅니다.


일단 원중심의 좌표는 (0, 0)으로 간주합니다.






원의 중심이 (0,0)이 아니라면, in_x 와 in_y의 변수에 각각 원의 중심 좌표를 빼주세요.

즉 (in_x-center_x)^2 ,  (in_y-center_y)^2 가 되는겁니다. 


svchost.exe CPU, 메모리 문제있다면..

WINDOWS

SVCHOST는 윈도우의 서비스를 호스트해주는 프로세스입니다. 보통 그냥 꺼버리면, 재부팅을 필요로 한다거나 문제점이 생길 수 있습니다..


그런데 가끔 svchost.exe의 cpu점유율이나, 메모리가 너무 많이먹어 불편하시다면 일단 무엇이 원인인이 찾아야하죠.


일단 작업관리자를 켜봅니다..




프로세스를 이름으로 정렬해서 보면 많은 svchost가 있습니다.


이젠 문제가 있는거같은 되는 svchost에서 오른쪽 메뉴->서비스로 이동(S)를 클릭합니다.




이렇게 그 svchost를 이용하는 서비스이름과 설명들 그리고 PID를 알 수 있습니다.


이렇게 문제가 되는 서비스를 수사망을 좁혀(?) 문제를 해결 할 수 있을것입니다.



필요하지 않은 서비스가 있다면 중지라던지.. 당장 필요없는 서비스가 있다면 svchost를 강종한다던지..



물론 svchost외에 lsass나 서비스를 사용하여 작동중인 프로세스는 모두 서비스를 볼 수 있습니다..









Visual Studio 2012 한글로 언어 변경하기.

C/C++

VS2012를 어둠의 루트이든, 정식 루트이든, 보통 영문버전 파일을 설치하셨을것입니다.


이를 다른 언어로 변경할 수 있습니다. 네 뭐 당연한 이야기지만요. 찾으시는 분들이 많더라구요.



일단 VS2012를 완벽하게 설치해주시기 바랍니다.






http://www.microsoft.com/visualstudio/kor/downloads 로 가셔서 자신의 맞는 제품 종류(Ultimate, Express...)


에 맞게 선택하셔서 선택하시면 위와 같이 늘어납니다.





오른쪽 언어 팩에서 한국어로 선택하신다음에 다운로드해주세요.


그런다음에 마음껏 설치해주시면 됩니다.




먼저 VS2012를 종료해주셔야합니다.




개인정보 취급장칭이나 사용약관을 읽어보신다음에 동의하신다음에 설치합니다.




알아서 설치됩니다.




설치가 다 되었습니다..






그다음에 VS2012를 실행시키신다음에 TOOLS->OPTIONS를 선택합니다.





International Settings - > Lamguage 를 English 에서 한국어를 선택하시고 OK를 누릅니다.


그런다음에 VS2012를 죵류하신 후 다시 실행시키면 한글로 바뀐 VS2012를 보실 수 있습니다.







Visual Studio 2012를 설치했습니다.

NEWS

항상 2010을 사용하고 있었는데 요번에 2012가 나오면서 설치를 해보았습니다.





설치 전 확인사항들입니다.


애니메이션이 매우 부드러우며 메트로UI식으로 만들어진것같습니다.



울티메이트에는 이러한 제품들이 포함되어 있습니다.




심플한 설치중인 화면





실행하면 이러한 Splash 화면을 볼 수 있습니다.




UI에 많은 변화를 가져왔습니다.


꽤 심플하게 만들면서 눈이편안하게끔 만들어진거같습니다.


또한 기본적인 테마가 Light와 Dark가 있습니다.




위 화면이 Dark 테마입니다.






갑작스레 많이 변해서그런지 새로운 툴같아 어색하네요..


이젠 단축기 변경 노가다할 시간만 남았네요.. 

Create a Custom-Styled UI Slider (SeekBar) in Android

ANDROID

좋은글이 있어서 첨부합니다.


선출처 : http://www.mokasocial.com/2011/02/create-a-custom-styled-ui-slider-seekbar-in-android/


MokaSocial-Blog-Headers-Slider


An Android slider (or a SeekBar as it’s called in the Android world) is a pretty slick UI tool which we recently used in our Call Your Folks! app as a means of choosing a reminder frequency between one day and three months.

I’ll walk you through creating a custom-styled seekbar for your Android application using nothing but a few XML and image drawables.

In this tutorial, I assume that you know how to implement a SeekBar in your app; if you don’t, check out the Android API demos, specifically SeekBar1.java and seekbar_1.xml.

Step 1: Create Your Image Drawables (9-Patch)

Before creating any XML drawables, make sure you create the image drawables (including one 9-patch drawable) needed for the seekbar background, handle, and progress sections. The 9-patch drawables will be put to use by the XML drawables in the steps below.

Create the following drawables and place them in your /res/drawable/ folder:

Step 2: SeekBar Progress Drawable

Now create an XML drawable for the Android seekbar progress (the blue-striped section in the example), call it seekbar_progress_bg.xml, and place it in your /res/drawable/folder:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <clip>
            <shape>
                <gradient
                    android:startColor="#FF5e8ea3"
                    android:centerColor="#FF32a0d2"
                    android:centerY="0.1"
                    android:endColor="#FF13729e"
                    android:angle="270"
                />
            </shape>
        </clip>
    </item>
    <item>
        <clip>
        <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
            android:src="@drawable/stripe_bg"
            android:tileMode="repeat"
            android:antialias="true"
            android:dither="false"
            android:filter="false"
            android:gravity="left"
        />
        </clip>
    </item>
</layer-list>

The above XML first draws a semi-transparent, blue gradient, then layers the semi-transparent stripe image on top of the gradient. The highlighted line of code (line 20) refers to the stripe (semi-transparent) image inside your drawable folder, created in Step 1.

For more information on creating custom shapes via XML, check out the Android drawable resources docs, specifically the bitmap and shape sections.

Step 3: SeekBar Background Drawable

Next create the main seekbar progress drawable; it’ll assign a drawable to the seekbarprogress and secondaryProgress actions inside your seekbar. Name your drawable something like seekbar_progress.xml, place it inside your /res/drawable/ folder:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background">
        <nine-patch
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:src="@drawable/seekbar_background"
            android:dither="true"
         />
    </item>
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <gradient
                    android:startColor="#80028ac8"
                    android:centerColor="#80127fb1"
                    android:centerY="0.75"
                    android:endColor="#a004638f"
                    android:angle="270"
                />
            </shape>
        </clip>
    </item>
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/seekbar_progress_bg"
    />
</layer-list>

The first bit of highlighted code above (line 8) is referring to the seekbar background image (9-patch drawable) created in Step 1 and (line 29) is referring to the drawable you created above in Step 2.

Step 4: Bringing it all together…

At this point, all you need to do is call your seekbar_progress drawable when declaring your seekbar:

01
02
03
04
05
06
07
08
09
10
<SeekBar
        android:id="@+id/frequency_slider"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="20"
        android:progress="0"
        android:secondaryProgress="0"
        android:progressDrawable="@drawable/seekbar_progress"
        android:thumb="@drawable/seek_thumb"
/>

The two lines of highlighted code are setting the progress and thumb drawables for the SeekBar item. The @drawable/seekbar_progress refers to the XML drawable created in the previous step.

See it in action!

For a “live demo” of the seekbar bar being used, download our Call Your Folks! app.

For more information on the Android SeekBar, check out the Android docs.

마켓등록시 예기치 않은 오류가 발생했습니다. 나중에 다시 시도해 주세요

ANDROID



마켓에 apk를 등록할때 예기치 않은 오류가 발생했습니다. 나중에 다시 시도해 주세요 마와 같은 오류가 밣생할 때가 있다, 보통 컴퓨터를 리붓을 하거나 apk를 재 Export 하다보면 되긴하는데.. 이럴때도 안될때는 자동로그인이 되어있더라도, 로그아웃후 다시 로그인하면 정상적으로 올라간다.


단, 가끔 구글 서버가 장애가 있어서 안올라가는 이유도 있다.

z3ron

분류없음











120824

CG





120824.psd



그냥 심심해서

[Android] LazyList (비동기식 이미지 다운로드 클래스)

ANDROID


LazyList

A simple library to display images in Android ListView. Images are being downloaded asynchronously in the background. Images are being cached on SD card and in memory. Can also be used for GridView and just to display images into an ImageView.

(http://github.com/thest1/LazyList/ 사이트에서 인용)


보통 Listview에서나, ImageView에서 로딩알림없이, 비동기식으로 이미지를 웹으로 불러올때 사용하는 Class입니다.


개인적으로 ImageDownloader(http://code.google.com/p/android-imagedownloader/source/browse/trunk/src/com/example/android/imagedownloader/ImageDownloader.java?r=3)도 써봤지만, LazyList만큼 만족스러운 Class 를 보지못했습니다.


무려 메모리에 캐싱가능한 MemoryCache 기능과 SD카드나, 앱 Cache공간에 FileCahce해주는 기능도 있습니다.

상황에 따라 적절하게 개발자가 선택도 가능하며, 자동으로 적절하게 캐시를 합니다.


또 MIT 라이센스라 상업적이나, 개인적인 사용에도 지장이없습니다. 또 Github에서 배포되서 Checkout도 편합니다.


링크 : http://github.com/thest1/LazyList/


MIT Lincense란?


MIT 허가서(영어: MIT License, MIT 라이선스)는 매사추세츠 공과대학교(MIT)을 기원으로 하는 소프트웨어 라이선스 중 가장 대표적인 것이다. X11 License 또는 X License로 표기되기도 한다.


MIT 허가서는 미국의 매사추세츠 공과대학교에서 자기 학교의 소프트웨어 공학도들을 돕기 위해 개발한 허가서이다. MIT 허가서를 따르는 소프트웨어를 개조한 제품을 반드시 오픈 소스로 배포해야 한다는 규정이 없으며, GNU 일반 공중 허가서의 엄격함을 피하려는 사용자들에게 인기가 있다.

MIT 허가서는 GNU 일반 공중 허가서(GPL)등과 달리 카피 레프트는 아니며, 오픈 소스 여부에 관계없이 재사용을 인정하고 있다. BSD 라이선스를 기초로 작성된 BSD계열 라이선스 중의 하나이다. 여러 가지 라이선스 중에서도 MIT 허가서는 매우 제한이 느슨한 라이선스라고 할 수 있다. 이 허가서를 따르는 대표적 소프트웨어로 X 윈도 시스템(X11)이 있다.


출저 : Wikipedia (

http://ko.wikipedia.org/wiki/MIT_%ED%97%88%EA%B0%80%EC%84%9C)





[Android] NoThrowThreadPool

ANDROID
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class NoThrowThreadPool extends ThreadPoolExecutor {

    private static final RejectedExecutionHandler defaultHandler = new AdoptPolicy();

    public NoThrowThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler);
        setRejectedExecutionHandler(defaultHandler);
    }

    public NoThrowThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue,
            ThreadFactory threadFactory) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, defaultHandler);
    }

    public NoThrowThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue,
            RejectedExecutionHandler handler) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, Executors.defaultThreadFactory(), defaultHandler);
    }

    public NoThrowThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue,
            ThreadFactory threadFactory, RejectedExecutionHandler handler) {
        super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, defaultHandler);
    }

    public static class AdoptPolicy extends ThreadPoolExecutor.AbortPolicy {

        @Override
        public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
            new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString()).printStackTrace();
        }
    }
}



[mIRC] ForeWindows 캡션

C/C++


ForeWindow.dll


마비노기 영웅전 시즌2 1차 프로모션 영상

NEWS


점프말곤 대만족!!


ImageDownloader 사용중 302 status로 IO 오류 발생시

ANDROID

그냥 이것도 저를 위한 메모입니다만, 혹시 저같이 초보인 다른 분들이 헤매실까봐 공개로 해 놓습니다.

NO_ASYNC_TASK일때는 상관 없는데(NO_ASYNC_TASK쓸일은 캐시때문이겠지만...), 

NO_DOWNLOADED_DRAWABLE이나 CORRET 사용시입니다.

페이스북api같이 프로필 사진등을 리다이렉션 해주는 주소로 줄때 이러한일이 발생하는데요.


ImageDownloader클래스의 Bitmap downloadBitmap(String url) 메서드를 수정해 주시면 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Bitmap downloadBitmap(String url) {
    final int IO_BUFFER_SIZE = 4 * 1024;
 
    // AndroidHttpClient is not allowed to be used from the main thread
    final HttpClient client = (mode == Mode.NO_ASYNC_TASK) ? new DefaultHttpClient() :
        AndroidHttpClient.newInstance("Android");
    final HttpGet getRequest = new HttpGet(url);
 
    try {
        HttpResponse response = client.execute(getRequest);
        final int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode == 301 || statusCode == 302)
        {
            Header redirect = response.getFirstHeader("Location");
            if (client instanceof AndroidHttpClient)
                ((AndroidHttpClient)client).close();
            return downloadBitmap(redirect.getValue());
        }
        if (statusCode != HttpStatus.SC_OK) {
            Log.w("ImageDownloader", "Error " + statusCode +
                    " while retrieving bitmap from " + url);
            return null;
        }
 
        final HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream inputStream = null;
            try {
                inputStream = entity.getContent();
                // return BitmapFactory.decodeStream(inputStream);
                // Bug on slow connections, fixed in future release.
                return BitmapFactory.decodeStream(new FlushedInputStream(inputStream));
            } finally {
                if (inputStream != null) {
                    inputStream.close();
                }
                entity.consumeContent();
            }
        }
    } catch (IOException e) {
        getRequest.abort();
        Log.w(LOG_TAG, "I/O error while retrieving bitmap from " + url, e);
    } catch (IllegalStateException e) {
        getRequest.abort();
        Log.w(LOG_TAG, "Incorrect URL: " + url);
    } catch (Exception e) {
        getRequest.abort();
        Log.w(LOG_TAG, "Error while retrieving bitmap from " + url, e);
    } finally {
        if ((client instanceof AndroidHttpClient)) {
            ((AndroidHttpClient) client).close();
        }
    }
    return null;
}

강조된 부분이 추가된 부분입니다. (Line 12 ~ 18)

 저도 잘 모르는지라, 질문하셔도 답은 못할 수 있습니다. 


참고 :



Activity 애니메이션 XML 모음(?)

ANDROID

안드로이드에서 자주 사용하며 유용하고 이쁜 Activity 전환에 많이 사용하는 전환 애니메이션들 입니다.


사용방법은 추후에 포스팅 하도록 하겠습니다..





slide_in_left.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="-100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />

</set>




slide_in_right.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="100%"
        android:fromYDelta="0%"
        android:toXDelta="0%"
        android:toYDelta="0%" />

</set>




slide_in_top.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="-100%"
        android:toYDelta="0%" />

</set>



slide_out_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="0%"
        android:toYDelta="100%" />

</set>


slide_out_left.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="-100%"
        android:toYDelta="0%" />

</set>



slide_out_right.xml

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <translate
        android:duration="200"
        android:fromXDelta="0%"
        android:fromYDelta="0%"
        android:toXDelta="100%"
        android:toYDelta="0%" />

</set>



slide_out_top.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="0%"
        android:toYDelta="-100%" />

</set>



slide_in_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="200"
        android:fromYDelta="100%"
        android:toYDelta="0%" />

</set>



압축파일로도 첨부하겠습니다.


res/anim 폴더에 넣고 사용하시면 됩니다.



anim.zip



간단한 JSON 노드 체계 확인 (JSON viewer)

JAVA





Online JSON Viewer를 통해 보면 됩니다..




예를들어


{ 
     "title":"TEST", 
     "title_img":"title.png", 
      "buttons":[ 
           { 
                 "id":"home01", 
                 "title":"테스트버튼", 
                 "icon_img":"test_btn.png", 
                 "text_img":"text_img.png" 
           }, 
           { 
                 "id":"home02", 
                 "title":"테스트버튼2", 
                 "icon_img":"test_btn2.png", 
                 "text_img":"text_img2.png" 
           } 
       ] 
}



와 같은 내용의 노드를 확인하면




위와같이 깔끔하게 나옵니다..


URL로 통해 불러오는것도 가능합니다.



링크 : http://jsonviewer.stack.hu/


티스토리 툴바