[FLEX] swf Object 사용

Programming/FLEX | 2008/03/21 10:25 | 이수영

얼마전 부터 플래시를 활성화 시키기가 좀 짜증나 졌다.

익스플러워 업데이트 되고 부터 이런저런 자바스크립트 소스들이 나오기 시작했는데...

어도비에서 제공되는 익스텐션도 괜찮았다.

하지만 요즘 들어 swfObject를 제일 많이 사용하는 같다.

http://blog.deconcept.com/swfobject/ 를 가보면 소스와 사용법을 볼수있다.


주의 할건 플래시를 넣은 table 이나 div 위에 height 값을 정해 주지 않고 그 않에 파일을 import 하면 다른 링크로 갈때나 새로고침 할때 플래시 컨텐츠가 순간 올라간다

우선 간단하게 정리해 본다.

사용방법


SWFObject.js 파일을 include 해서 간단한 코드만 몇 줄 작성하면 된다.

아래 샘플을 보자.

<script type="text/javascript" src="swfobject.js"></script>

<div id="flashcontent">

This text is replaced by the Flash movie.

</div>

<script type="text/javascript">

var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");

so.write("flashcontent");

</script>

<div id="flashcontent">[...]</div>

코드는 Flash plug-in 버전이 낮거나 설치 되있지 않으면 출력된다.

var so = new SWFObject(swf, id, width, height, version, background-color);

기본 파라미터 :

  • swf - swf 파일경로와 파일명.
  • id - object나 embed tag의 ID.
  • width - Flash movie width.
  • height - Flash movie height.
  • version - Flash content에서 요구하는 player 버전. format : 'majorVersion.minorVersion.revision'. ex) "6.0.65". 또는 major 버전만 기입해도 된다("6").
  • background color - background color.

    추가 파라미터 :

  • useExpressInstall - 만약 ExpressInstall 기능을 사용할려면 'true'로 설정
  • quality - quality 설정. default는 "high".

  • xiRedirectUrl - 만약 ExpressInstall을 이용해 upgrade를 완료한 유저를 redirect 하길 바란다면 교체될 URL을 여기서 정할수 있다.

  • redirectUrl - 만약 최신 plug-in버전을 가지고 있는 않는 유저를 redirect 시킬려면 이 파라미터를 사용해라. 그러면 redirect 될것이다.

  • detectKey - 사용 않해봐서 모르겠다..ㅡㅡ; 해석도 맞는지 모르겠다. 원문을 참고해라.

    이것은 SWFObject script가 detection을 우회할때 찾을 url 변수 이름이다. default는 'detectflash'. Example : 너는 ?detectflash=false 를 파일명 뒤에 붙이는 걸로 Flash 탐지를 우회해서 간단하게 페이지에 플래시를 보여준다.

    This is the url variable name the SWFObject script will look for when bypassing the detection. Default is 'detectflash'. Example: To bypass the Flash detection and simply write the Flash movie to the page, you could add ?detectflash=false to the url of the document containing the Flash movie.

    so.write("flashcontent");

    열거된 HTML element 내부에 재배열 하는 것으로 SWFObject script가 페이지에 flash 컨텐츠를 쓰는 것이다.(만약 적합한 플러그인 버전이 인스톨 되 있다면)

    굳이 div 레이어에 넣지 않아도 된다. td 태그에도 id와 name값을 지정해 주고 so.wirte(id )를 호출해주면 된다.


    SWFObject가 작동되는 브라우져

    SWFObject는  PC: IE5/5.5/6, Netscape 7/8, Firefox, Mozilla, and Opera Mac: IE5.2, Safari, Firefox, Netscape 6/7, Mozilla, and Opera 7.5+에 작동되고 있다.

    plug-in 탐지에 있어서 SWFObject's built는 무시 당할수 있다. 만약 새로운 브라우저가 언젠가 런치 되거나, 유저시스템에서 plug-in 탐지 실패의 어떤 이유 때문에, SWFObject에 대한 탐지 built를 비활성화 할 우회 링크를 include 할 수 있고, 우회링크는 항상 페이지에 플래시 컨텐트를 보여줄것이다. 우회 링크를 사용하는 방법은, 간단하게 플래시 컨텐츠가 있는 페이지로 링크를 거는 것이다. url에 'detectflash=false'를 붙이는 것이다.

    <a href="mypage.html?detectflash=false">Bypass link</a>

    추가 파라미터를 추가하는 샘플

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100%", "7", "#336699");
       so.addParam("quality", "low");
       so.addParam("wmode", "transparent");
       so.addParam("salign", "t");
       so.write("flashcontent");
    </script>

    사용가능은 전체 파라미터

    "Flashvars" parameter 사용법

    변수이름/변수값으로 추가로 추가 해주면 된다. Flash Player 6 이상에서 작동.

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
       so.addVariable("variable1", "value1");
       so.addVariable("variable2", "value2");
       so.addVariable("variable3", "value3");
       so.write("flashcontent");
    </script>

    html에 get방식으로 넘어온 값을 가져오는 방법

    http://www.example.com/page.html?variable1=value1&variable2=value2 이렇게 넘어 왔다면:

    아래처럼 getQueryParamValue()을 사용해 값을 가져오면 된다.

    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
       so.addVariable("variable1", getQueryParamValue("variable1"));
       so.addVariable("variable2", getQueryParamValue("variable2"));
       so.write("flashcontent");
    </script>

    getQueryParamValue()location.hash에서 변수값을 읽어 온다.

    SWFObject에서 'Express Install' 사용하기

    expressinstall.as는 사이트 가서 소스를 받으면 들어 있다. so_tester.fla 참조

    #include "expressinstall.as"

    //ExpressInstall object 초기화

    var ExpressInstall = new ExpressInstall();

    // 만약 업데이트가 필요하면, 'start upgrade' 버튼을 보여준다.

    if (ExpressInstall.needsUpdate) {

    // ExpressInstall.init()을 호출하는 것으로 자동으로 업데이트를 시작할수 있다.

    // 유저에게 보여줄 메시지와 start 버튼이 있는 무비클립을 attach 시켜서 중앙으로 이동시킨다.

    var upgradeMsg = attachMovie("upgradeMsg_src", "upgradeMsg", 1);

    upgradeMsg._x = Stage.width / 2;

    upgradeMsg._y = Stage.height / 2;

    // attach 한 무비클립내의 버튼에 Expressinstall updater 시작하는 action 기입

    upgradeMsg.upgradeBtn.onRelease = function() {

    // ExpressInstall.init() method는 실제로 update를 실행 시킨다.

    ExpressInstall.init();

    }

    // expressinstall가 호출 되었으면 timeline을 멈춰라.

    stop();

    }


    ExpressInstall을 체크하는 프레임에는 아무것도 작성하지 않는 것이 중요하다.


    만약 팝업윈도우나, ExpressInstall update을 완료했을때 다른 url로 보낼려면, xiRedirectUrl 속성을 사용하여, 플래시 무비가 있는 활성화된 페이지 대신에 유저를 보낼 페이지로 redirect 시킬수 있다.


    <script type="text/javascript">
       var so = new SWFObject("movie.swf", "mymovie", "200", "100", "8", "#336699", true);
       so.setAttribute('xiRedirectUrl', 'http://www.example.com/upgradefinished.html'); // 반듯이 존재해야 하는 페이지
    o.write("flashcontent");
    </script>


    출처 : http://blog.naver.com/logon77

  • [JAVA] 자바 중요 클래스들~~

    Programming/JAVA | 2008/03/21 10:22 | 이수영

    자바 초보자들이 꼭 알아야 할 중요 클래스와 메소드


    자바 언어의 기본 설계에 해당하는 클래스들과 인터페이스들을 자바 프로그램을 작성할 때 주로 사용되는 클래스 패키지는 java.lang 과 java.util 패키지이다.

    여기에서는 자바의 중요한 몇몇 클래스에 대해 알아보자

     

    java.lang.Object 클래스.

    Java.lang.Object클래스는 모든 자바 클래스의 최상의 클래스이다. 프로그래머가 아무런 클래스로부터 상속을 받지 않았더라도 컴파일러는 자동적으로 Object 클래스로부터 상속 받도록 처리되어 있다.  가장 자주 사용되는 몇 개의 메서드만 정리하고 넘어가자.

     

    public Boolean equals(Object o);

    protected Object clone()

    객체를 복사하는데 사용된다.

    public boolean equals(Object o)

    두 객체의 내용이 같은지 비교한다.

    public int hashCode()

    객체를 위한 해쉬코드를 반환한다. 해쉬코드는 자바 시스템에서 객체를 유일하게 식별하는 정수값이다.

     

     

    Wrapper 클래스

    기본형 데이터의 내용을 클래스화 하는 클래스이다.

    기본형

    데이터

    Wrapper

    클래스

    메서드

    boolean

    Boolean

    boolean booleanValue()

    클래스로부터 기본 타입 boolean 값을 반환

    byte

    Byte

    public staic byte parseByte(String s)

    public static byte parseByte(String s, int radix)

    public byte byteValue()

    문자열을 byte값으로 변환

    문자열을 radix 진법에 따라 10진수,2진수 등의 byte값으로 변환

    10진수 byte값을 반환

    char

    Character

    public char charVlaue()

    public static boolean isLowerCase(char ch)

    public static boolean isUpperCase(char ch)

    public static boolean isDigit(char ch)

    public static boolean isLetter(char ch)

    public static boolean isLetterOrDigit(char ch)

    public static char  toLowerCase(char ch)

    public static char  toUpperrCase(char ch)

    public static boolean isWhitespace(char ch)

    클래스로부터 기본 char값을 반환

    소문자 인가

    대문자인가

    숫자인가

    문자인가

    문자또는 숫자인가

    소문자로 변환

    대문자로 변환

    ch문자가 자바화이트 문자인가

    short

    Short

    public static int parseShort(String s)

    public static int parseShort(String s,int radix)

    public byte     byteValue()

    public short    shortValue()

    public int       intValue()

    public long     longValue()

    public float     floatValue()

    public double   doubleValue()

     

    int

    Integer

    public ctatic int parseInt(string s)

    Short 클래스 메서드와 같다.

     

    long

    Long

     

     

    float

    Float

    public static boolean isNaN(float f)

    Short 클래스 메서드와 같다.

    float형이 의미 있는 숫자가 아닌지 여부를 알아본다

    double

    Double

    Short 클래스 메서드와 같다.

     

     

     

    String 클래스

    String클래스는 문자열을 나타내기 위해 사용된다.

    Null문자열은 String str=new String();  또는 String str=””; 형식을 사용한다.

     

    string 클래스의 대표적인 메서드

    Int length()

    스트링 버퍼 클래스 객체에 저장된 문자의 수를 반환.

    boolean equals(Object anObject)

    String 클래스 객체의 내용이 같은지 비교한다.

    boolean equalsIgnoreCase(String str)

    대소문자 구분없이 문자열이 같은지 비교한다.

    String substring(int beginindex)

    Beginindex로 주어진 값부터 문자열의 마지막까지의 문자열을 반환해주는 메서드

    String concat(String s)

    호출한 클래스 객체의 내용과 인자로 주어진 문자열을 합친 새로운 String 객체를 반환한다

    String replace(char ol, char ne)

    ol 문자를 ne문자로 모두 바꾼다

    String toLowerCase()

    String클래스 객체의 모든 문자를 소문자로 바꾼다

    String toUpperCase()

    String클래스 객체의 모든 문자를 대문자로 바꾼다

    char charAt(int index)

    Index로 지정된 곳의 문자를 반환한다

     

     

    자바의 기본 데이터형을 String클래스로 전환

    첫번째 방법: String str=Integer.toString(intVal);

    두번째 방법: 기본 데이터형간에 + 연산자를 사용하면 자동적으로 String 클래스 객체로 변환된다.  String s=이거는 문자열 : +100;

     

    StringBuffer 클래스

    StringBuffer 클래스는 문자열 상수가 아니고 동적 문자열을 처리하는 기능을 제공한다.  이 클래스는 메모리상에서 문자열을 처리하기 때문에 동적으로 문자열의 내용을 바꾸거나 위치를 조정하는 일등을 할 때 처리 속도가 빠르다.

    StringBuffer st=new StringBuffer();

     

    StringBuffer 클래스의 대표적인 메서드

    int length()

    스트링버퍼 클래스객체에 실제 저장된 문자 수를 반환한다.

    int capacity()

    클래스객체에 사전에 할당된 문자 배열의 크기를 반환한다.

    StringBuffer append(String s)

    s로 주어진 문자열을 스트링버퍼의 문자열에 추가한다.

    StringBuffer insert (int offset,String s)

    정해진 위치에 문자열 s를 추가한다.

    String toString()

    버퍼에 저장된 문자열로 String클래스객체를 생성

     

     

    StringTokenizer 클래스

    문자열 파싱을 처리하는 클래스이다. 파싱은 문자열을 여러 개의 문자열로 나누는 작업을 의미한다.

    public String nextToken()

    파싱한 문자열을 순서대로 반환한다.

    public boolean hasMoreToken()

    파싱된 문자열이 nextToken()메서드를 실행한뒤 남아 있는지를 확인한다.

    public int countToken()

    파싱된 문자열이 모두 몇 개인지를 반환한다.

     

     

    Vector 클래스

    배열과 비슷하지만 배열과 달리 다른 종류의 데이터형을 가진 데이터 요소를 가질수 있으며, 데이터가 가득차게되면 자동적으로 저장영역을 늘려준다. 하지만 Vector클래스는 객체 레퍼런스를 저장하기 때문에 자바 기본형 데이터는 저장할 수 없다.

    Vector 클래스 객체 생성

    public Vector()

    빈 벡터 객체를 생성한다

    public Vector(int capacity)

    capacity에 주어진 수 만큼의 공간을 가진 벡터 객체를 생성한다.

    public Vector(int capacity, int incremental

    capacity에 주어진 수 만큼의 공간을 가진 백터를 생성한다. 공간이 다 사용되면 incremental만큼씩 늘어난다.

    vector 에 Element(요소) 저장하기

    public void addElement(Object obj)

    obj객체를 벡터의 맨 마지막에 추가한다.

    public void insertElementAt(Object obj,int index)

    벡터에서 index로 지정한 위치에 객체를 삽입한다.

    public void settElementAt(Object obj,int index)

    기존 요소의 값을 객체 obj로 바꿔넣는다.

    Vector 안의 요소에 접근

    public Object elementAt(int index)

    index로 지정된 요소를 반환한다.

    public Object firstElement()

    첫번째 요소를 반환한다.

    public Object lastElement()

    마지막 요소를 반환한다

    Vector 에서 내용 찾기

    public boolean contains(Object obj)

    obj객체가 벡터에 포함되어 있는지 확인한다

    public int indexOf(Object obj)

    obj객체의 위치값을 반환한다.

    Vector 에서 요소 지우기

    public void removeAll()

    벡터안의 모든 데이터를 지운다

    public boolean removeElement(Object obj)

    obj 객체를 지운다.

    Vector 의 크기 변화 시키기

    public int capacity()

    현재 벡터가 포함할수 있는 요소의 개수

    public int size()

    실제 벡터가 포함하고 있는 요소의 개수

    public void ensureCapacity(int min)

    min 만큼 벡터의 크기를 증가한다.

    public void trimSize()

    벡터의 크기를 현재 가지고 있는 요소의 수와 같게 줄인다.

     

     

    Hashtable 클래스

    해쉬테이블이란 키(key)와 그에 해당하는 값(value)로 구분된 데이터 구조이다.  벡터와 달리 해쉬 테이블에 값을 저장하고, 검색하기 위해서는 키로 접근한다.

    Hashtable ht=new Hashtable();  생성자로 객체를 생성한다.

    public Object put(Object key,Object value)

    value 로 주어진 클래스 객체를 key로 주어진 클래스 객체의 키를 이용하여 해쉬 테이블에 저장한다.

    public Object get(Object key)

    Key로 주어진 클래스 객체의 키를 이용하여 객체를 검색한다.

    public Object remove(Object key)

    Key로 주어진 클래스 객체의 키를 이용하여, 해쉬테이블에서 해당 객체를 삭제한다.

     

    Calendar 클래스

    날짜와 시간을 객체 모델링화한 클래스이다. 제공하는 정보는 년,월,이르시,분,초까지의 시간과 날짜와 관련된 정보이다.

    Calendar ca=Calendar.getInstance();   static메서드를 이용하여 객체를 생성한다. 객체가 생성되면 get()메서드를 이용하여 원하는 정보를 얻어낼 수 있다.

    int hour=ca.get(Calendar.HOUR);

    int min=ca.get(Calendar.MINUTE);

    int sec=ca.get(Calendar.SECOND);

     

     

    Random 클래스

    임의의 값을 발생시켜 주는 클래스이다. Random 클래스 객체를 한번 생성하면 여러 번 임의의 값을 얻을수 있다.

    int nextInt()

    Random클래스 객체를 생성한후 이 메서드를 호출하면 임의의 값이 반환된다.

    int nextInt(int n)

    0에서 n 까지 정수값 사이에 위치함 임의의 값을 발생시켜서 반환한다.

    태그 : Java

    [FLEX] 비트멥 만들기

    Programming/FLEX | 2008/03/21 10:08 | 이수영

    요즘 제가 Flex를 어찌저찌하여 공부하면서 뭣 좀 만들고 있는데..
    화면을 캡쳐하고 이걸 다시 Draw할 방법이 필요했습니다.

    이래저래 찾아보다 발견한 클래스는 바로 BitmapData.

    srcD는 DisplayObject 또는 BitmapData

    var bitmapData:BitmapData = new BitmapData(width, height);
    bitmapData.draw(srcD,new Matrix(width/srcD.width, 0, 0, height/srcD.height, 0, 0));
    이렇게 하면 화면을 캡쳐해서 BitmapData안에 담을 수 있습니다.
    단, 도메인에 대한 제약이 따르긴 하는데요, 이것은 나중에 따로 설명을 하도록 하지요..
    오늘의 메인은 아니니까 ^^


    자.. 이렇게 화면을 캡쳐를 했으면 캡쳐 한 것을 적당한데 뿌려 줄 수도 있어야 겠죠?

    레퍼런스를 찾아보면 Bitmap이라는 것을 사용하라고 되어 있습니다.
    var bitmap:Bitmap = new Bitmap(bitmapData);
    addChild(bitmap);
    자.. 이렇게 돌렸더니..
    왠걸.. 디버거에서 에러를 내 줍니다.
    UIComponent로 형변환이 안된다구요..

    이래 저래 알아 본 결과, Flex에서 제공하여 주는  기본 컴포넌트들은UIComponent인 것만 자식으로 받을 수 있습니다.
    흑.. 같은 개발자로서 이 개발자의 마음이 이해가 안가는 것은 아니지만..
    그래도 원망스럽군요..

    원망스럽건 어찌되었건 해결 방법은 찾아야지요.. 설마 방법이 없기야 하겠습니까..
    Image 컴포넌트에 분명 뭔가 있을 거라는 생각을 가지고 source 프로퍼티에 Bitmap도 넣어보고, BItmapData도 넣어 보고.. 하다가 발견하였습니다.. 짜자잔~~~
    Image 컴포넌트의 addChild에 bitmap을 넣으니 동작을 하는군요..

    Image의 소스를 보던 중 addChild에 여기서는 UIComponent로 바로 형변환을 시도 하는 것이 아니라 이래 저래 클래스 타잎을 체크를 하는 것을 보고 넣어봤더니 바로 됩니다.
    아 감동의 도가니탕..

    자.. 그럼 솔루션..

    <mx:Script>
    <![CDATA[
    var
    bitmapData:BitmapData = new BitmapData(width, height);
    var bitmap:Bitmap = new Bitmap(bitmapData);
    image.addChild(bitmap);
    ]]>
    </mx:Script>


    <mx:Image id="image"/>
    그럼 오늘의 공부는 여기까지~


    출 처 : http://huck.tistory.com/24
    태그 : flex

    [FLEX] creationPolicy 사용

    Programming/FLEX | 2008/03/17 20:20 | 이수영
    < Multiple-view containers의 ViewStack, TabNavigator, Accordion사용시  creationPolicy 사용 >
     
  • all : 한번에 모두 생성
  • auto : 처음 보여주는 첫 화면만 생성(default 값)
  • none : 처음엔 전부 생성을 하지 않다가 createComponentsFromDescriptors() method를 써서 생성할 수 있음.
  • queued : creationIndex 값을 부여하여 생성되는 순서를 정할 있다. 아래 function을 사용하면 다이나믹한 화면을 구성할 수 있다.
    function addToCreationQueue(id:Object, preferredIndex:int,
    callbackFunction:Function, parent:IFlexDisplayObject):void
  • 태그 : flex
    < FLEX Application 생성 순서 >


    1. preinitialize()  =>  화면이 처음 열렸을 때(초기상태 일때)

    2. initialize()  => 컴포넌트를 처음 불러들이는 시점

    3. creationComplete()  =>  모든 컴포넌트 생성이 완료된 시점

    4. applicationComplete()  =>  어플리케이션 생성이 완료 된 시점

    5. updateComplete()  =>  사이즈가 변경 되거나, 기타 확인되지 않은 값(Ex, 위치나 스크롤 등)이 변경 되었을 때
    태그 : flex