모바일용 Display Shelf
기본적인 Display Shelf 예제는 PerspectiveTransform을 사용한다. 이 효과는 모바일 장비에서는 이용하지 않으나 네비게이션 시스템과 같은 display shelf는 더 작은 스크린에서도 유용하다. 이 예제는 모바일 장비에서 작동하도록 어떻게 DisplayShelf를 수정하는지 알려준다.
코드 살펴보기
Display Shelf의 모바일 버전은 3가지 변경으로 데스크탑 버전과 같다.: 더 작은 스크린 조절, PerspectiveTransform을 바꾸기 위해 스케일 효과를 사용, 더 효과적인 시각화를 위해 배경 변경
화면 크기를 변경하는 것은 휩다. 화면에 더 작은 컨텐트를 놓아야 한다. 그러면 자동적으로 크기가 바뀐다. DisplayShelf 클래스는 크기 조절과 함께 작성되어 있다. 이 클래스는 몇가지 변수를 갖는다. 스크린에서 사진 교체와 크기 조절을 하도록 부분 변경을 할 수 있다. : spacing, smallScale, leftOffset, rightOffset. 이 변수들을 조절하여 각각 측면에서 더 가깝게 사진을 이동할 수 있고, 가운데 사진에 더 가깝게 이동하고, 가운데에 위치하지 않은 사진의 크기를 변경한다. 그림 1에서 보는 변수들은 더 견고하게 압축된 사진과 함께 더 작은 장면을 만든다.
var shelf:DisplayShelf;
shelf = DisplayShelf {
spacing: 30
scaleSmall: 0.6
leftOffset: -55
rightOffset: 55
content: bind for(i in images) {
var item:Item = Item {
angle: 45
blocksMouse: true
position: indexof i - half
image:Image { url: "{__DIR__}photos/{i}" width: 100 height: 100 }
shelf: bind shelf
};
item;
}
Figure 1: 모바일 특성을 위한 DisplayShelf 구성하기
본래의 DisplayShelf 예제에서 PerspectiveTransform은 Item 클래스의 내부에 적용된다. 모바일 버전을 위해 그림 2에서 보는 것처럼 PerspectiveTransform 코드를 완벽하게 제거했다. 크기를 조절하는 것은 scaleSmall 변수를 설정할 때 DisplayShelf 내에서 자동적으로 발생한다.(which is 1.0 by default for no-scale).
public class Item extends CustomNode {
public var position:Integer = 0;
public var angle = 45.0;
public var shelf:DisplayShelf;
public-init var image:Image;
override var onMousePressed = function(e:MouseEvent) {
shelf.shiftToCenter(this);
};
override public function create():Node {
return Group {
content: [
ImageView {
image: image
},
Rectangle { width: 100 height: 100
stroke: Color.BLACK strokeWidth: 3
fill: null }
]
}
}
}
Figure 2: 모바일에서 사용하기 위한 Item.fx 수정
모바일 장비에서 DisplayShelf가 작동하도록 하기 위해 두가지를 변경한다. 그러나 보기엔 사진이 여전히 좀 작다. 본래 버전에서 사진은 중심에 있었음에도 불구하고 하나의 각도에서 볼 수 있었다. 현재 모든 사진은 모든 방향에서 보여진다. 이러한 현상은 사진의 끝쪽을 보는 것이 어렵게 한다. 이 문제는 모바일 사이즈에 스크린을 줄임으로써 더 뒤섞인다.(This problem is further compounded by shrinking the screen to mobile size.) 사진을 더 시각적으로 하기 위해 Item 클래스(위의 그림 2)에 있는 각 사진 주위에 3픽셀 넓이의 검은색 경계선을 추가했다. 또한 더 어둡게 하기 위해 배경 그레디언트를 변경했다. 더 더우운 그레디언트와 검은 경계선은 사진이 더 쉽고 잘 보도록 한다.
var stage = Stage {
visible: true
resizable: false
scene: Scene {
content: [
Rectangle {
width: width
height: 240
fill: LinearGradient {
startX: 0 startY: 0
endX: 0 endY: 1
proportional: true
stops: [
Stop { offset: 0.0 color: Color.rgb(150,150,150) }
Stop { offset: 0.3 color: Color.rgb(0,0,0)},
Stop { offset: 0.7 color: Color.rgb(0,0,0)},
Stop { offset: 1.0 color: Color.rgb(150,150,150)},
]
}
},
shelf
]
}
}
그림 3: 새로운 그레디언드 배경
Josh Marinacci썬마이크로시스템즈의 엔지니어
