2012-07-17 2 views
0

무대에서 비트 맵이 있는데이 비트 맵을 TileList 구성 요소에로드하려고합니다. 그러나 TileList의 dataProvider는 URL 링크가 매개 변수로 전달되지만 bitmapData는 전달하지 못하도록 요청합니다. 내가 어떻게 그럴 수 있니?TileList AS3에 비트 맵 데이터로드

참고 : byteArray로 저장된 Sqlite 데이터베이스에서 bitmapdata를로드하고 있습니다. 오, 나는 AIR를 사용하고있다.

+0

Adobe의 TileList 구성 요소는 두 가지입니다. 하나는 Flex 용이고 다른 하나는 Flash CS5 용입니다. 어느 쪽을 사용하고 있습니까? –

+0

플래시 용 fl.controls.TileList. – astralmaster

답변

2

거기에 아마이다. 당신이 BitmapData 빠른 옵션으로 bitmapData 것을 포함하는 비트 맵 개체를 통과하는 것입니다 경우 : 당신은 사용자 정의 셀 렌더러 경로를 수행 할 경우

for(var i:int = 0 ; i < 10; i++) t.addItem({label:'item '+(i+1),source:new Bitmap(new YourBitapData())}); 

을, 당신은 그렇게 할도 할 수 있습니다. 주된 문제는 UIComponent의 getDisplayObjectInstance() 메서드가 BitmapData를 처리하지 않는다는 것입니다.난 당신이 ImageCell로 서브 클래스 및 변경이 필요 만들 수 상상 :

  • 중 하나 getDisplayObjectInstance()를 오버라이드 (override)과 같은 일을 확인하여 : if(getQualifiedSuperclassName(classDef) == "flash.display::BitmapData") return new Bitmap(new classDef);
  • 중 하나 소스를 기반으로 비트 맵 객체를 추가하는 간단한에 의해을

더 간단할수록 좋습니다. 제 제안을 권하고 싶습니다.

+0

고맙습니다. 나는 '소스'매개 변수가 URL을 취할 수 있지만. 한 가지 더 질문하지만 나중에 TileList에서 bitmapData를 어떻게 가져올 수 있습니까? – astralmaster

+0

항목의 source 속성은 비트 맵 객체를 다시 검색하므로 bitmapData 속성으로 가져올 수 있습니다. 'tileList.getItemAt (0) .source.bitmapData'. 조금 벗어난 주제 : 도움이 될지 모르지만 알아 둘 사항 : [캐싱] (http://www.darklump.co.uk/blog/?p=3) –

1

fl.controls.TileList를 사용하지 않았지만 Flex 구성 요소와 유사한 전략 인 항목 렌더러를 사용하는 것으로 보입니다. 이 경우

는 fl.controls.TileList에 대한 설명서는 말한다 :이 구성 요소에 대한

기본 셀 렌더러는 ImageCell로 클래스입니다. ImageCell 셀 렌더러는 축소판 이미지와 단일 행 레이블을 표시합니다. TileList 구성 요소에서 목록 기반 셀을 렌더링하려면 CellRenderer 클래스를 사용합니다.

당신이 원하는 것은 dataProvider에서 BitMapData을 가져 와서 이미지를 표시하는 데 사용할 클래스를 지정하는 것입니다.

렌더러에 다른 클래스를 사용하려면 TileListcellRenderer 스타일을 사용하십시오.

시작하는 데 도움이 될 수 있습니다 내가 플래시 TileList 구성에 대한 사용자 정의 셀 렌더러를 생성하지만, 여기에 몇 가지 링크입니다하지 않은

:

기본 접근 방식 사용자 정의 렌더러를 만들려면 다음과 같이하십시오.

1. 새 클래스를 만듭니다. AT는의 CellRenderer 연장 :

public class CustomRenderer extends CellRenderer 
{ 
    public function CustomRenderer() 
    { 
     super(); 
    } 
} 

2. 오버라이드 CellRenderer 클래스 data 속성 세터에있어서, 상기 TileList 성분이 dataProvider의 각 요소에 대한 렌더링을 생성한다

. 그런 다음 각 렌더러에서이 세터 메소드를 호출하여 해당 요소의 데이터를 전달합니다. 이 세터에서는 BitMapData을 가져 와서 렌더러에 이미지를 사용할 수 있습니다. 아래는 테스트되지 않은 코드는 당신은 TileList 구성 항목의의 소스 매개 변수로 DisplayObject를 전달할 수 있습니다이 할 수있는 더 좋은 방법은 (우리가 플렉스에서 물건 이러한 유형의 좋은 단축키를)

override public function set data(value:Object):void 
{ 
    super.data = value; 
    if (value != null && value.hasOwnProperty("propertyNameThatContainsBitMapData")) 
    { 
     var bmData:BitMapData = value["propertyNameThatContainsBitMapData"] as BitMapData; 
     if (bmData) 
     { 
      var g:Graphics = this.graphics; 
      g.beginBitMapFill(bmData); 
      g.drawRect(0,0,100,100); // use whatever dimensions you want 
      g.endFill(); 
     } 
    } 
} 
+0

링크에 감사드립니다. 따라서 이해할 수있는 한, dataProvider의 매개 변수를 재정의해야합니까? 현재 몇 가지 예를 찾고 있는데 – astralmaster

+0

몇 가지 세부 정보를 포함하도록 내 답변을 수정하겠습니다. 죄송합니다. 이보다 더 많은 도움이되지 못합니다. (저는 Flex 나 순수한 AS3 개발자가 아니라 사용하지 마십시오. Flash CS5). –

+0

나는 @George Profenza의 솔루션이 마음에 든다. 꽤 똑바로 보인다! –