아래처럼 코딩 하시면 됩니다. 그럼 선택한 계열의 색상을 바꿀 수 있습니다.

좀더 생각해 보면 계열이 아니라 선택한 바의 색상만 바꿔 줄 수도 있겠죠...

 

참고로 fill 은 ifill 인터페이스를 상속받아 구현하여 사용 할 수 있습니다.

이것을 응용하면 내부 칠해지는 방법을 여러가지로 바꿀 수 있겠죠... 그라데이션, 이미지, 테두리 칠하기 ...

 

단순 코딩 붙여 넣기를 넘어서서 이젠, 응용하는 실력이 필요한 시점입니다. (저두 뭐 아직은 배워 가고 있지만서도 바꿔가는거죠)

 

==> 코드 작성은 Flex4 기준으로 되어 있습니다. 뭐 별다른 차이는 없으니 적절하게 쓰시면 될꺼에요..

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>

<s:Application

       xmlns:fx="http://ns.adobe.com/mxml/2009"

       xmlns:s="library://ns.adobe.com/flex/spark"

       xmlns:mx="library://ns.adobe.com/flex/halo"

       creationComplete="init()"

       minWidth="1024" minHeight="768">

       <fx:Script>

       <![CDATA[

             import mx.graphics.SolidColor;

             import mx.charts.chartClasses.Series;

             import mx.collections.ArrayCollection;

            

             private var prevSel:Number = -1; //previous selected index

            

             [Bindable] private var chartData:ArrayCollection = new ArrayCollection( [

                    { Country: "USA", Gold: 35, Silver:39, Bronze: 29 },

                    { Country: "China", Gold: 32, Silver:17, Bronze: 14 },

                    { Country: "Korea", Gold: 50, Silver:40, Bronze: 30 } ]);

            

             private function init():void{

                    reset();

             }

             private function seriesClickHandler(e:MouseEvent):void{

                   

                    //reset color

                    reset();

                   

                    //draw

                    var ser:Series = e.currentTarget as Series;

                    var idx:Number = Number(ser.id.substr(3));

                   

                    if(idx==prevSel) {

                           prevSel = -1;

                           return;      //in case : same series selected.

                    }

                   

                    var cArr:Array = [0xD1A803,0xB5BBB3,0x916315]; //color array : gold, silver, bronze

                    ser.setStyle("fill",new SolidColor(cArr[idx-1],0.5));

                    ser.displayName = ser.displayName + " (Selected)";

                   

                    prevSel = idx;

             }

            

             private function reset():void{

                   

                    var serArr:Array = bchart.series;

                   

                    var cArr:Array = [0xD1A803,0xB5BBB3,0x916315]; //color array : gold, silver, bronze

                    var dArr:Array = ["Gold","Silver","Bronze"];  //color array : gold, silver, bronze

                   

                    for(var s:String in serArr){

                           var ser:Series = serArr[s];

                           ser.setStyle("fill", new SolidColor(cArr[s]));

                           ser.displayName  = dArr[s];

                    }

             }

            

       ]]>

       </fx:Script>

      

       <mx:BarChart id="bchart" x="47" y="67"  dataProvider="{chartData}">            

             <mx:verticalAxis>

                    <mx:CategoryAxis categoryField="Country"/>

             </mx:verticalAxis>

             <mx:series>

                    <mx:BarSeries id="ser1" displayName="Gold" click="seriesClickHandler(event)" xField="Gold" yField="Country"/>

                    <mx:BarSeries id="ser2" displayName="Silver" click="seriesClickHandler(event)" xField="Silver" yField="Country"/>

                    <mx:BarSeries id="ser3" displayName="Bronze" click="seriesClickHandler(event)" xField="Bronze" yField="Country"/>                 

             </mx:series>

       </mx:BarChart>

      

       <mx:Legend dataProvider="{bchart}"/>   

            

</s:Application>

'etc > old' 카테고리의 다른 글

[FLEX] 블랙젝 - 카드게임  (0) 2009.08.28
[FLEX] MP3 Player 만들기  (0) 2009.08.21
[FLEX] blazeDS개발환경 요약참조 사항.  (2) 2009.08.14
[ FLEX ] 능력평가하기 크...  (1) 2009.08.14
[ FLEX4 ] Module 사용시 파일 크기 비교  (0) 2009.08.12
0. 참조 문서

blazeDS 개발자 가이드 : http://livedocs.adobe.com/blazeds/1/blazeds_devguide/

blazeDS 다운로드 : http://opensource.adobe.com/wiki/display/blazeds/download+blazeds+3



1. blazeds.war 파일 다운로드 이후 Eclipse or Tomcat Import


2. 중요 참조 [jre 5.0 이상에서만 동작함에 유의 !]


blazeds.war 파일을 초기 import 하면 WEB-INF 폴더가 생성됩니다.

WEB-INF
└flex
  └ services-config.xml : 전반적인 서비스 설정을 포함.
  └ messaging-config.xml : Message Push 서비스 등 메시지 관련 서비스 설정을 포함.
  └ remoting-config.xml : Remote Object 호출 서비스 설정을 포함.
  └ proxy-config.xml : 프록시 서비스를 사용할 때
└lib - Flex에서 사용되는 library 파일이 존재하는 폴더
└web.xml - Flex Session Management, MessageBroker Servlet 설정에 대한 내용 포함.

3. services-config.xml


: 기본 채널의 설정 및 포함하는 서비스 파일의 경로를 확인 할 수 있다.
my-amf, my-secure-amf, my-polling-amf ..

4. 나머지 .xml 파일


- 설정된 해당 서비스를 확인할 수 있다.
- destination id 설정을 통해 flex에서 접근할 수 있도록 설정한다.

ex)

ㄱ. MessagePush : 해당 채널에 대한 종착점 id를 설정한다.
<destination id="realMsg"/>

ㄴ. Remote Object : 해당 원격지 클래스를 호출하기 위한 종착점 id를 설정한다.
<destination id="fruitRO">
        <properties>
            <source>wonsama.test.FruitManager</source>
        </properties>
</destination>

5. 기타 확인사항


ㄱ. <default-channels> 하위 노드에 여러개의 채널이 선언된 경우
맨 위쪽 부터 처리하며, 채널이 동작하지 않는 경우 다음 채널 서비스를 실행한다.

    <default-channels>
        <channel ref="my-streaming-amf"/> <!-- 처음 실행됨 -->
      <channel ref="my-polling-amf"/> <!-- 위 채널이 동작하지 않으면 동작 -->
    </default-channels>

ㄴ. StreamingAMFChannel 사용 시 <properties>의 하위노드가 1개 이상 존재해야 한다.
==> 존재하지 않으면 Explore에서 정상적으로 MessagePush가 동작하지 않음. (버그인듯?)

ex)
<channel-definition id="my-streaming-amf"
    class="mx.messaging.channels.StreamingAMFChannel">
    <endpoint
        url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf"
        class="flex.messaging.endpoints.StreamingAMFEndpoint" />
    <properties>
        <idle-timeout-minutes>0</idle-timeout-minutes>
        <max-streaming-clients>10</max-streaming-clients>
        <server-to-client-heartbeat-millis>5000    </server-to-client-heartbeat-millis>
        <user-agent-settings>
            <user-agent match-on="MSIE" kickstart-bytes="2048"
                        max-streaming-connections-per-session="3" />
            <user-agent match-on="Firefox" kickstart-bytes="2048"
                        max-streaming-connections-per-session="3" />
        </user-agent-settings>
    </properties>
</channel-definition>

ㄷ. 익스플로러에서 모든 창을 종료하지 않으면 Messaging Service에서 Lock이 발생되어 실시간 메시지 수신을 할 수 없다(약 10초 ~ ???초). (MessageBroker쪽)

파폭에서는 발생하지 않지만 익스플로러에서는 위와 같은 문제가 발생하네여 아.... 초난감 ;;
24시간 시간 모니터링 툴을 제작시 반드시 고려를 하시기 바랍니다. 프로젝트 3개월 차에 이런 버그를 발견해 내서리 쩝...

고객사에는 뭐 끄지마세요 이런식으로 -_-; 아.... 중요 정보 인것 같아 이전 포스트에 덧칠하여 다시 올려 봅니다.




http://flashahead.adobe.com/challenges/
간단하게 이메일 인증을 받고
로그인을 하면 바로 테스트를 시작할 수 있습니다.

제 ... 결과는 -_-/ 78점 쩝... ;; 어쨌든 1단계는 성공..... 2단계도 봐야징... 후훟

==> 2단계 실패 -_-; 영어... 공부해야 되겠네요 .. ㅜㅜ

시험에 관한 내용은 : http://koko8829.tistory.com/679 에서 확인 하실 수 있습니다.






모듈을 처음에 생성할때 아래와 같은 문구를 볼 수 있는데... 특정 어플에 최적화 시키겠습니까 ? 라는 말인데..



테스트 정신(?)에 입각하여 하

하나는 (1번) Optimize for application 을 선택
다른 하나는 (2번) Do not optimize 를 선택한 이후 파일 크기를 비교 해봤습니다.

(참조로 Wow.mxml 은 아무것도 없는 파일임 기본 생성 파일...)

(1번) : 645K
(2번) : 161K (둘다 디버그 모드에서의 사이즈)

엄청난 파일 크기 차이를 보였습니다. 제 짧은 소견으로는

Wow.mxml (최적화를 지정한 Application) 에서 참조하는 Framwork.swc ... 이 관련 있겠죠...

==> 결론 : Optimize 옵션을 선택하도록 하자... (뭐 범용적으로 사용한다면 아래것을 선택하면 되겠지만 .. 용량이 문제 크...)


뭐 이건 Flex Library Project에서도 유사하게 적용되는데... Button 하나만 사용하더라두 swc로 배포할때 크기가 무지 늘어나는 것을 확인 할 수 있죠... Button에서 사용한 상위 클래스들은 모두 포함해야 되니... ㄷㄷ

==> 결론 : 모듈화 라이브러리 화 할때에는 생각을 한다음에 뺄꺼만 빼야 되겠더라구요....




나도 받았음 -__-/

시리얼 번호 받기 참 쉽죠잉~~~?


갠적으로 느끼는건.. BETA인데... 째째하게 시리얼 번호를 받는건.. 흠...

FLEX3은 실업자 버전, 학생 버전 ... 이렇게 무료버전도 많이 나줘주면서 말이야... 크...

시리얼 번호 받기
https://www.adobe.com/cfusion/entitlement/index.cfm?e=labs%5Fflashbuilder4

힌트 : 구글검색 하면 다 나와요 ~ 퍽 ㅜㅜ ㅈㅅ

출처 : http://www.idg.co.kr/newscenter/common/newCommonView.do?newsId=57970

애플이 미국 연방저작권청에 아이폰 운영체제를 변형시키면 이동통신 네트워크의 전송탑과 충돌하거나 사람들이 돈을 내지 않고 통화를 할 수도 있다고 밝혔다.

 

애플은 제일브레킹(Jailbreaking)으로 알려진 아이폰 소프트웨어의 수정이나 변형 행위는 네트워크 전반의 교란으로 이어질 수 있다고 설명했다. 제일브레이킹은 저작권 제어 기능을 회피하는 것으로, 애플이 인증하지 않은 애플리케이션을 설치하는 등 금지된 행위를 할 수 있다.

 

지난 6월 23일 등록된 애플의 논증은 전자프론티어재단(EFF)이 아이폰 소프트웨어에 대한 변형이 미국 디지털 밀레니엄 저작권법(DMCA) 위반이 아니기 때문에 허용되어야 한다고 연방저작권청에 청원을 낸 것에 대한 반박으로 제시된 것이다.

 

미국 연방저작권청은 3년마다 청문회를 열어 미국 저작권법의 예외가 될 수 있는 요청에 대해 검토하고 있다.

 

제일브레이킹은 애플과 공급계약을 체결하지 않은 이동통신업체를 이용하는 사용자들이 많이 사용하는 방법의 하나다. 하지만 애플은 이 때문에 이동통신업체들이 심각한 기술적 문제에 부딪힐 수 있다고 경고했다.

 

애플의 설명에 따르면, 제일브레이킹 아이폰에서는 운영체제의 코드에 액세스할 수 있기 때문에 통신업체 네트워크와의 접속을 제어하는 BBP에 액세스할 수 있도록 프로그램을 다시 짤 수도 있다. 이를 통해 해커들이 네트워크 상에서 바람직하지 않은 일을 더 쉽게 저지를 수 있다는 것.

 

예를 들어 BBP에 액세스하면, 해커는 통신망의 전송탑이 휴대폰을 인식하는 ECID(exclusive chip identification)를 변경할 수도 있다. 이렇게 되면 해당 휴대폰의 통화는 완전히 익명이 되기 때문에 범죄에 악용될 수 있으며, 통화료를 부과할 수도 없게 된다.

 

애플의 주장 중 일부는 사실이지만, 통신업체들은 휴대폰의 SIM에 담긴 별도의 인식자를 사용해 고객을 구분, 과금과 인증을 한다.

 

애플은 만약 여러 대의 휴대폰이 동일한 ECID를 갖도록 조작된다면, 이는 전송탑 오동작의 원인이 될 수 있다고 주장했다. 또한 통신업체의 전송속도 제한도 회피할 수 있으며, 이를 통해 해커가 DoS 공격을 할 수도 있는 등 심각한 위험을 초래할 수 있다고 강조했다.

 

하지만 EFF는 이런 기술적인 고려는 차치하고, 애플의 아이폰 소프트웨어에 대한 정책이 저작권 보호 관점에서 이점이 없으며, 독립 아이폰 애플리케이션 개발업체의 경쟁을 저해한다고 주장하고 있다.

 

연방저작권청은 이에 대한 결정을 올해 말 경에 내릴 것으로 예상된다.  jeremy_kirk@idg.com


View : http://developer.android.com/reference/android/view/View.html (원문)

이 클래스는 사용자 인터페이스 구성요소에 대한 기본적인 생성 블록을 나타냅니다.


View는 화면의 사각 영역을  포함하며 그리기와 이벤트 처리를 포함합니다.
View는 Button, Text Field 등의 인터렉티브 UI 구성 요소를 만드는데 사용하는 기본 클래스입니다.
View Group의 하위 클래스는 레이아웃의 기본 클래스로, 투명 컨테이너에 View 또는 다른 View Group을 포함합니다.

안드로이드가 View를 그리는 방법 : http://developer.android.com/guide/topics/ui/how-android-draws.html (원문)

2단계에 걸쳐 작업은 진행 됩니다.

1. mesure(int, int)를 통한 영역 확인
: 나->자식 TopDown 방식으로 각각 요소에 대한 공간을 계산하여 확보 합니다.

2. layout(int,int,int,int,)를 통한 배치 작업
: 나->자식 TopDown 방식으로 위에서 지정된 영역 내에서 각각의 요소를 배치 합니다.

View 사용 방법

1. Properties 설정 : 각 요소의 프로퍼티를 설정한다.

2. Focus 설정 : 포커싱을 설정한다 (이벤트에서 포커스 획득, 손실을 이용하여 다양하게 처리 가능

3. Listener 설정 : 원하는 리스너를 등록하여 사용할 수 있다.
Ex) setOnFocusChangeListener(View.OnFocusChangeListener)

4. Visibility 설정 : 뷰를 보여줄지 여부를 설정할 수 있다. setVisibility(int)
    
ID

: View는 Widget과 관련된 상수 ID값을(R.java 참조) 가지고 있으며 일반적으로 xml을 통해 설정한다.

Xml 예시 )

       <Button id="@+id/my_button"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@string/my_button_text"/>

Activity에서 사용예시 )

      Button myButton = (Button) findViewById(R.id.my_button);

    
기타

Position, Size, Padding & Margins, Layout, Drawing, Focus Handling, Touch Mode, Scrolling, Tags, Animation 은

http://developer.android.com/reference/android/view/View.html (원문) 을 참조하기 바람


Widget : http://developer.android.com/reference/android/widget/package-summary.html (Wdiget 패키지 요약)

Widget은 유저와 상호작용을 하는 View Object입니다. 안드로이드는 Button, Check Box, Text-Entry 등 다양한 Widget을 제공하여 빠른 UI설계를 도와 줍니다. Clock, Zoom, Date Picker와 같은 몇몇 Widget은 복잡하게 이뤄져 있습니다. Widget은 제한을 두고 있지 않으며 기존 Widget 조합 또는 자신만의 View Object를 만들 수도 있습니다.

UI Event : http://developer.android.com/guide/topics/ui/ui-events.html (UI 이벤트 처리)

이제 UI를 만들었으면 버튼을 눌러 다음 행동을 처리하는 Event 처리를 해야 하는데 2가지 방법이 존재한다.

1. 이벤트 리스너 정의 및 등록
View.OnClickListener : 클릭 이벤트 처리
View.OnTouchListener :  터치 이벤트 처리
View.OnKeyListener : 키 이벤트 처리

2. View에 존재하는 콜백 메소드 재정의
onTouchEvent() : 터치 콜백
onTrackballEvent() : 트랙볼 콜백
onKeyDown() : 키다운 콜백

Menu : http://developer.android.com/guide/topics/ui/menus.html (메뉴 만들기)

Menu는 UI의 중요한 부분 중 하나로 메뉴 키를 누를 때 동작하며 기본적으로 안드로이드에서 제공합니다.

메뉴는 View를 사용하면 자동 생성되며 onCreateOptionMenu(), onCreateContextMenu() 이 2개의 콜백 메소드로 알려주며, 항목 선택시에는 onOptionsItemSelected(), onContextItemSelected() 콜백 메소드를 통하여 제어 할 수 있습니다. 리스너를 생성 제어하지 않아도 됩니다.

고급기능


Adapter : http://developer.android.com/guide/topics/ui/binding.html (Apdater를 이용해 데이터 바인딩 하기)

View 또는 ViewGroup의 정보를 하드 코딩이 아니라 외부 정보를 바인딩하여 처리 하고 싶을 때 사용하는 것으로, View 및 각각의 자식 객체를 Adapter를 통해 초기화 및 생성할 수 있습니다.

Style & Themes : http://developer.android.com/guide/topics/ui/themes.html (스타일과 테마 적용하기)

단순한 View 만족하지 못할 경우 , 스타일과 테마을 적용하여 기존 UI를 좀더 멋있게 꾸밀 수 있다.

Style (작은 것) : 특정 View 요소에 적용 가능
Theme (큰 것) : 특정 Activity 및 전역 Application에 적용 가능

Create Custom Widget : http://developer.android.com/guide/topics/ui/custom-components.html (원문)

기본적인 접근

1. View또는 기존 생성한 클래스를 상속(Extends) 받는다.
2. 상위 클래스(Super Class)의 메소드(onXXX …) 를 오버라이드 한다. Ex) onDraw(), onKeyDown(), onMeasure()…
3. 이제 클래스를 새롭게 확장한 이후 이 클래스를 바탕으로 좀더 확장해 나간다.

참조

onDraw () : 2D 그래픽을 그리기 위한 메소드
onMeasure() : Widget의 크기(영역 : 폭, 높이)을 지정하는 메소드

기존 존재하는 클래스 확장 예시

1. 정의
public static class MyEditText extends EditText

2. 클래스 초기화
Super를 사용하여 상위 클래스를 초기화 한다 이후 xml 을 통해 레이아웃을 초기화 할 수 있다.

3. 메소드 오버라이드
onDraw(), onMeasure() 등을 오버라이딩 하여 원하는 형태로 꾸며준다.

4. 커스텀 컴포넌트 사용
      <view
        class="com.android.notepad.NoteEditor$MyEditText"
        id="@+id/note"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:drawable/empty"
        android:padding="10dip"
        android:scrollbars="vertical"
        android:fadingEdge="vertical" />

[잡설]

이정도면 40분동안 주저리는 충분하겠지 ..? 후후훗~ 음... 근데 공부하면서 느끼는건데 안드로하다 플렉스하다 와따가따 하면 변수위치가 해깔림 떱.

 Flex)
var sampel:Sample = new Sample;
 VS  Java)
Sample sample = new Sample();

음.. 뭐 이런거 ?





 

ArrayAdapter

기본적으로 단일 TextView의 id를 생성하며, 레이아웃을 좀더 복잡하게 꾸미고자 할 경우는
toString()메소드 (텍스트를 변경하고자 하는 경우) 또는
getView(int,View,ViewGroup)을 override 하여 원하는 형태로 꾸며 사용하면 된다.

 

http://developer.android.com/reference/android/widget/ArrayAdapter.html

LayoutInflater

XML파일정보를 통해 View를 셋팅할 때 사용되며, 바로 사용되지 않으며
getLayoutInflater() 또는 getSystemService(String) 을 통해
현재 Context에 연결된 표준 LayoutInflater를 반환한다.

예시)
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

자신만의 view를 위한 LayoutInflater(LayoutInflater.Factory) 를 만들기 위해서는,
cloneInContext(Context) 를 통해 존재하는 ViewFactory를 복제한 이후,
setFactory(LayoutInflater.Factory) 를 통해 Factory를 설정한다.

[참조]
퍼포먼스 상의 이유로 인해 XML은 컴파일된 자원(ex) R.xxx )에 만 지원한다.

(빌드시 xml을 파싱하는것은 무거운 대가를 지불하기 때문임..)

원문 주소 :  http://developer.android.com/reference/android/view/LayoutInflater.html

차트의 AxisRenderer에 labelRenderer 설정을 통해 유사한 효과를 볼 수 있습니다. 후후...




<mx:horizontalAxisRenderers>

        <mx:AxisRenderer

               axis="{yearAxis}" id="scrollAxis" tickPlacement="none"   placement="bottom"

                    labelRenderer="comp.charts.WLegendButton"                

                    labelGap="3"

               />            

</mx:horizontalAxisRenderers>


+ Recent posts