2010-02-22 8 views
2

"회전 목마"위젯을 사용해야하는 GWT 프로젝트에서 현재 작업 중입니다. 회전식 위젯은 정보 조각과 2 개의 화살표를 표시합니다. 사용자가 화살표 중 하나를 클릭하면 내용이 애니메이션과 함께 이동되고 새 내용으로 바뀝니다.GWT 회전 목마 위젯

나는 사용할 수있는 위젯 libs를보고 있었지만 "회전 목마"위젯은 사용 가능한 것으로 보이지 않습니다. 내가 찾은 유일한 실제 후보는 gwt-yui-carousel 위젯입니다 (아래 링크 참조). 그러나 이것이 필요한 자원을 거의 과장 한 것으로 보이지만 간단한 이미지 만 표시하는 대신 MVP 용어로보기/발표자를 표시합니다. (여기에서 오는 : http://code.google.com/p/gwt-yui-carousel/) http://gwt-yui-carousel.googlecode.com/svn/trunk/www/com.gwtyuicarousel.javascriptload.JavaScriptLoad/javascriptload.html

: 여기

은 위젯 실행 중입니다.

잘 모르는 캐 러셀 위젯이 있습니까? 또는 원하는 효과를 내기 위해 기존의 효과를 확장해야합니까? gwt-yui-carousel (나는 그렇게 생각하지 않습니다)을 사용 하시겠습니까? 더 좋은 옵션이 없다면 직접 위젯을 만드는 것이 좋은 생각이라고 생각합니까?

중요한 점은 여기에서 화살표 버튼을 클릭하면 DataBase에서 데이터를 가져 오는 등 발표자 /보기를 표시해야한다는 것입니다. 따라서 기존 위젯의 사용자 정의가 필요할 것입니다. , 또는 선택한 위젯이 GWT 위젯 목록을 표시 할 수 있어야합니다. 나는 사람들이 아니기 때문에 내가, 기존의 일반적인 회전 목마 위젯 중 하나를 사용할 수 있다고 생각하지 않는다 다시

"GWT 지향"및보기/발표자 및 모든 GWT 물건을 지원하지 수)

모든 대답은 크게 감사하겠습니다 :)

안부,

닐스

답변

1

이 가능한 구현을 알고하지 않습니다하지만 당신은 시간에이 위젯을 쓸 수 있습니다.

는 URL 목록 (이미지)을 들고 위젯 만들기 :

CarouselWidget(ArrayList<String> urls) extends HorizontalPanel 

다음 패널에 두 개의 버튼 및 표시하기 원하는 이미지를 추가 할 수 있습니다.

왼쪽 버튼 이미지는 사용자의 URL 목록에서 공급하고 왼쪽 또는 오른쪽 버튼을 을 클릭하면 당신이 시작을 이동

/이미지/영상/이미지 .../이미지/마우스 오른쪽 버튼을 index - 또는 ++ ... 이미지보기를 새로 고칩니다.

시작 인덱스에서 배열의 "실제"인덱스를 계산합니다.

1

또 다른 가정용 양조 솔루션은 GWT LayoutPanel을 기반으로 할 수 있습니다. LayoutPanel이 AnimatedLayout 인터페이스를 구현할 때 스크롤링 애니메이션을 표시 할 수 있습니다.

public class CarouselPanel extends LayoutPanel { 

    int itsCurrentWidget = 0; 
    private ArrayList<Widget> itsWidgets; 
    private Button itsLeftButton; 
    private Button itsRightButton; 

addToCarousel (위젯 위젯)은 위젯 목록에 위젯을 추가하지만 패널에는 추가하지 않습니다. 패널의 실제 위젯이 표시되어야합니다.

당신은으로 표시 센터 위젯의 레이아웃을 제어 할 수 있습니다 스크롤 버튼과 같은

private void setRight(Widget widget, boolean newWidget) { 
    if (widget != null) { 
     if (newWidget) 
      add(widget); 
     setWidgetLeftWidth(widget, 50, Unit.PCT, 45, Unit.PCT); 
     setWidgetTopHeight(widget, 20, Unit.PCT, 60, Unit.PCT); 
     widget.removeStyleName("centerCarousel"); 
     widget.setStylePrimaryName("sideCarousel"); 
     if (itsRightHandler != null) 
      itsRightHandler.removeHandler(); 
     itsRightHandler = widget.addDomHandler(new ClickHandler() { 
      public void onClick(final ClickEvent event) { 
       scrollRight(); 
      } 
     }, ClickEvent.getType()); 
    } 
} 

또한 (좌) 권리를 사용할 수있는 위젯 :

private void setCenter(Widget widget, boolean newWidget) { 
    if (widget != null) { 
     if (newWidget) 
      add(widget); 
     setWidgetLeftWidth(widget, 10, Unit.PCT, 80, Unit.PCT); 
     setWidgetTopHeight(widget, 10, Unit.PCT, 80, Unit.PCT); 
     widget.removeStyleName("sideCarousel"); 
     widget.setStylePrimaryName("centerCarousel"); 
    }  
} 

및 의한 권리 위젯을 클릭 리스너를 추가하여

및 스크롤 방법은 다음과 같을 수는 :

public void scrollRight() { 
    if (itsCurrentWidget >= getWidgetCountInCarousel()-1) 
     return; 
    if (itsCurrentWidget > 0) { 
     Widget hideWidget = getWidgetInCarousel(itsCurrentWidget-1); 
     remove(hideWidget); 
    } 
    Widget leftWidget = getWidgetInCarousel(itsCurrentWidget); 
    Widget centerWidget = getWidgetInCarousel(++itsCurrentWidget); 
    Widget rightWidget = null; 
    if (itsCurrentWidget+1 < getWidgetCountInCarousel()) { 
     rightWidget = getWidgetInCarousel(itsCurrentWidget+1); 
    } 
    setLeft(leftWidget, false); 
    setRight(rightWidget, true); 
    setCenter(centerWidget, false); 
    animate(500); 
} 

주 끝에 애니메이션의 방법은 부드러운 방법으로 위젯을 이동합니다.

망가 센터 위젯의 Z- 인덱스를 제어하는 ​​CSS 규칙을 정의하는 것을 잊지 :

.sideCarousel { 
    z-index: 0; 
} 

.centerCarousel { 
    z-index: 1; 
} 

내가 도움이되기를 바랍니다.

0

이것은 회전식 구현이며 gwt-querygwt-queryui을 사용합니다. 수직으로뿐만 아니라 수평으로도 사용할 수 있습니다. gwt-query 사용법의 목적은 애니메이션을 캐 러셀 이동으로 사용하는 것입니다. 또한 나선형 동작을 지원합니다. 코드에 java-docs를 추가하지는 않았지만 읽는 한 설명적인 주석을 찾을 수 있습니다.

희망이 있으면 유용 할 것입니다.

import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.user.client.ui.AbsolutePanel; 
import com.google.gwt.user.client.ui.Button; 
import com.google.gwt.user.client.ui.Composite; 
import com.google.gwt.user.client.ui.FlexTable; 
import com.google.gwt.user.client.ui.HasHorizontalAlignment; 
import com.google.gwt.user.client.ui.HasVerticalAlignment; 
import com.google.gwt.user.client.ui.Widget; 
import com.google.gwt.query.client.Function; 
import java.util.ArrayList; 
import java.util.List; 
import static com.google.gwt.query.client.GQuery.$; 

/** 
GWTCrousel implementation. 
    @author: Andrés82 
*/ 
public class GWTCarousel extends Composite { 

    /* 
     Public constants 
    */ 
public static final int HORIZONTAL = 0; // used for orientation 
public static final int VERTICAL = 1; 

/* 
     Constructor 
    */ 
public GWTCarousel() { 

      // inits the widget 
    mainPanel = new FlexTable(); 
    initWidget(mainPanel); 

      // structure 
    viewport = new AbsolutePanel(); 
    widgetsTable = new FlexTable(); 
    viewport.add(widgetsTable); 
    viewport.setWidgetPosition(widgetsTable,0,0); 

    // default behavior (not spiral, not animations enabled) 
    spiral = false; animationEnabled = false; 
    nextRow = 0; nextCol = 0; numberOfWidgetsToShow = 0; 
    movement = 0; animationTime = DEFAULT_ANIMATION_TIME; 
    widgetsList = new ArrayList<Widget>(); 

    // basics styling 
      $(viewport).css("overflow","hidden"); 
    widgetsTable.setCellSpacing(SPACING); 
    mainPanel.setCellSpacing(SPACING); 
} 

    // sets the carousel orientation 
public void setOrientation (int orientation) { 
    switch (orientation) { 
     case HORIZONTAL: 
      setHorizontalOrientation(); 
      break; 
     case VERTICAL: 
      setVerticalOrientation(); 
      break; 
     default:; 
    } 
    previous.addClickHandler(getpreviousClickHandler()); 
    next.addClickHandler(getnextClickHandler()); 

} 

    /* 
     Getters and setters 
    */ 

public int getOrientation() { return orientation; } 

public void setSpiral(boolean spiral) { this.spiral = spiral; } 

public boolean isSpiral() { return spiral; } 

public T2VoiceButton getprevious() { return previous; } 

public T2VoiceButton getnext() { return next; } 

public int getNumberOfWidgetsToShow() { return numberOfWidgetsToShow; } 

    // sets the number of widgets to show in the viewport 
public void setNumberOfWidgetsToShow(int numberOfWidgetsToShow) { this.numberOfWidgetsToShow = numberOfWidgetsToShow; } 

public void setAnimationEnabled(boolean animationEnabled) { this.animationEnabled = animationEnabled; } 

public boolean isAnimationEnabled() { return animationEnabled; } 

public double getWidgetWidth() { return widgetWidth; } 

public void setWidgetWidth(double widgetWidth) { 
    this.widgetWidth = widgetWidth; 
    double viewportWidth = orientation == HORIZONTAL ? widgetWidth * numberOfWidgetsToShow + (numberOfWidgetsToShow + 1) * SPACING : widgetWidth + 2 * SPACING; 
    viewport.setWidth(viewportWidth + "px"); 
} 

public double getWidgetHeight() { return widgetHeight; } 

public void setWidgetHeight(double widgetHeight) { 
    this.widgetHeight = widgetHeight; 
    double viewportHeight = orientation == VERTICAL ? widgetHeight * numberOfWidgetsToShow + (numberOfWidgetsToShow + 1) * SPACING : widgetHeight + 2 * SPACING; 
    viewport.setHeight(viewportHeight + "px"); 
} 

public void setanimationTime(int animationTime) { this.animationTime = animationTime; } 

public int getanimationTime() { return animationTime; } 

    /* 
     Other methods 
    */ 

public void addWidget (Widget widgetToAdd) { 
    switch (orientation) { 
     case HORIZONTAL: 
      addWidgetHorizontally(widgetToAdd); 
      break; 
     case VERTICAL: 
      addWidgetVertically(widgetToAdd); 
      break; 
     default:; 
    } 

} 

    /* 
     Fields and constants 
    */ 

    // constants 
private final int SPACING = 5; 
private final int DEFAULT_ANIMATION_TIME = 300; // defined in millis 

// structure 
private Button previous; 
private Button next; 
private AbsolutePanel viewport; 
private FlexTable widgetsTable; 
private FlexTable mainPanel; 

// control variables 
private boolean spiral; 
private boolean animationEnabled; 
private long animationTime; // defined in millis 
private double widgetWidth; 
private double widgetHeight; 
private int orientation; 
private int numberOfWidgetsToShow; 
private int nextRow; 
private int nextCol; 
private int movement; 
private List<Widget> widgetsList; 

    /* 
     Private methods 
    */ 

private void addWidgetVertically(Widget widgetToAdd) { 
    nextRow++; 
    widgetsList.add(widgetToAdd); 
    widgetsTable.setWidget(nextRow, nextCol, widgetToAdd); 
    widgetsTable.getCellFormatter().setAlignment(nextRow, nextCol, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
    if (spiral && nextRow > numberOfWidgetsToShow) { 
     shiftDown(); 
     $(widgetsTable).css("top", -(widgetHeight + SPACING) + "px"); 
    } 
} 

private void addWidgetHorizontally(Widget widgetToAdd) { 
    nextCol++; 
    widgetsList.add(widgetToAdd); 
    widgetsTable.setWidget(nextRow, nextCol, widgetToAdd); 
    widgetsTable.getCellFormatter().setAlignment(nextRow, nextCol, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
    if (spiral && nextCol > numberOfWidgetsToShow) { 
     shiftRight(); 
     $(widgetsTable).css("left", -(widgetWidth + SPACING) + "px"); 
    } 
} 

private void setHorizontalOrientation() { 
    orientation = HORIZONTAL; 
    // botones 
    previous = new T2VoiceButton (null,null,null); 
    next = new T2VoiceButton (null,null,null); 
    mainPanel.setWidget(0, 0, previous); 
    mainPanel.setWidget(0, 1, viewport); 
    mainPanel.setWidget(0, 2, next); 
    mainPanel.getFlexCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
    mainPanel.getFlexCellFormatter().setAlignment(0, 1, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
    mainPanel.getFlexCellFormatter().setAlignment(0, 2, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
} 

private void setVerticalOrientation() { 
    orientation = VERTICAL; 
    // botones 
    previous = new T2VoiceButton (null,null,null); 
    next = new T2VoiceButton (null,null,null); 
    mainPanel.setWidget(0, 0, previous); 
    mainPanel.setWidget(1, 0, viewport); 
    mainPanel.setWidget(2, 0, next); 
    mainPanel.getFlexCellFormatter().setAlignment(0, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
    mainPanel.getFlexCellFormatter().setAlignment(1, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
    mainPanel.getFlexCellFormatter().setAlignment(2, 0, HasHorizontalAlignment.ALIGN_CENTER, HasVerticalAlignment.ALIGN_MIDDLE); 
} 

private ClickHandler getpreviousClickHandler() { 
    switch (orientation) { 
     case HORIZONTAL: 
      return new ClickHandler() { 
       @Override 
       public void onClick(ClickEvent event) { 
        moveLeft(); 
       } 
      }; 
     case VERTICAL: 
      return new ClickHandler() { 
       @Override 
       public void onClick(ClickEvent event) { 
        moveUp(); 
       } 
      }; 
     default: 
      return null; 
    } 
} 

private ClickHandler getnextClickHandler() { 
    switch (orientation) { 
     case HORIZONTAL: 
      return new ClickHandler() { 
       @Override 
       public void onClick(ClickEvent event) { 
        moveRight(); 
       } 
      }; 
     case VERTICAL: 
      return new ClickHandler() { 
       @Override 
       public void onClick(ClickEvent event) { 
        moveDown(); 
       } 
      }; 
     default: 
      return null; 
    } 
} 

private void moveLeft() { 
    if (!spiral && movement > (numberOfWidgetsToShow - nextCol - 1)) { 
     movement--; 
     $(widgetsTable).animate("left: -=" + (widgetWidth + SPACING), animationEnabled ? animationTime : 0); 
    } else if (spiral) {  
     $(widgetsTable).animate("left: -=" + (widgetWidth + SPACING), animationEnabled ? animationTime : 0, new Function() { 
      @Override 
      public void f() { 
       shiftLeft(); 
       $(widgetsTable).css("left", -(widgetWidth + SPACING + 1) + "px"); 
      } 
     }); 
    } 
} 

private void shiftLeft() { 
    Widget widgetToMove = widgetsList.get(0); 
    widgetsList.remove(0); 
    widgetsList.add(widgetToMove); 
    for (int column = 0; column < nextCol; column++) { 
     widgetsTable.setWidget(0, column, widgetsList.get(column)); 
    } 
} 

private void moveRight() { 
    if (!spiral && movement < 1) { 
     movement++; 
     $(widgetsTable).animate("left: +=" + (widgetWidth + SPACING), animationEnabled ? animationTime : 0); 
    } else if (spiral) { 
     $(widgetsTable).animate("left: +=" + (widgetWidth + SPACING), animationEnabled ? animationTime : 0, new Function() { 
      @Override 
      public void f() { 
       shiftRight(); 
       $(widgetsTable).css("left", -(widgetWidth + SPACING + 1) + "px"); 
      } 
     }); 
    } 
} 

private void shiftRight() { 
    Widget widgetToMove = widgetsList.get(nextCol - 1); 
    widgetsList.remove(nextCol - 1); 
    widgetsList.add(0, widgetToMove); 
    for (int column = 0; column < nextCol; column++) { 
     widgetsTable.setWidget(0, column, widgetsList.get(column)); 
    } 
} 

private void moveUp() { 
    if (!spiral && movement < (nextRow - numberOfWidgetsToShow)) { 
     movement++; 
     $(widgetsTable).animate("top: -=" + (widgetHeight + SPACING), animationEnabled ? animationTime : 0); 
    } else if (spiral) { 
     $(widgetsTable).animate("top: -=" + (widgetHeight + SPACING), animationEnabled ? animationTime : 0, new Function() { 
      @Override 
      public void f() { 
       shiftUp(); 
       $(widgetsTable).css("top", -(widgetHeight + SPACING + 1) + "px"); 
      } 
     }); 
    } 
} 

private void shiftUp() { 
    Widget widgetToMove = widgetsList.get(0); 
    widgetsList.remove(0); 
    widgetsList.add(widgetToMove); 
    for (int row = 0; row < nextRow; row++) { 
     widgetsTable.setWidget(row, 0, widgetsList.get(row)); 
    } 
} 

private void moveDown() { 
    if (!spiral && movement > 0) { 
     movement--; 
     $(widgetsTable).animate("top: +=" + (widgetHeight + SPACING), animationEnabled ? animationTime : 0); 
    } else if (spiral) { 
     $(widgetsTable).animate("top: +=" + (widgetHeight + SPACING), animationEnabled ? animationTime : 0, new Function() { 
      @Override 
      public void f() { 
       shiftDown(); 
       $(widgetsTable).css("top", -(widgetHeight + SPACING + 1) + "px"); 
      } 
     }); 
    } 
} 

private void shiftDown() { 
    Widget widgetToMove = widgetsList.get(nextRow - 1); 
    widgetsList.remove(nextRow - 1); 
    widgetsList.add(0, widgetToMove); 
    for (int row = 0; row < nextRow; row++) { 
     widgetsTable.setWidget(row, 0, widgetsList.get(row)); 
    } 
} 

} 

사용 예

// shows 5 widgets in the viewport 
GWTCarousel horizontalSpiralCarousel = new GWTCarousel(); 
horizontalSpiralCarousel.setAnimationEnabled(true); 
horizontalSpiralCarousel.setSpiral(true); 
horizontalSpiralCarousel.setMillisToMove(200); 
horizontalSpiralCarousel.setOrientation(T2VoiceCarousel.HORIZONTAL); 
horizontalSpiralCarousel.setNumberOfWidgetsToShow(5); 
horizontalSpiralCarousel.setWidgetWidth(100.0); 
horizontalSpiralCarousel.setWidgetHeight(100.0); 

// adding widgets to carousel 
HorizontalPanel maroonTile = new HorizontalPanel(); 
$(maroonTile).css("background-color","maroon"); 
$(maroonTile).css("width", 100.0 + "px"); 
$(maroonTile).css("height", 100.0 + "px"); 
HorizontalPanel greenTile = new HorizontalPanel(); 
$(greenTile).css("background-color","green"); 
$(greenTile).css("width", 100.0 + "px"); 
$(greenTile).css("height", 100.0 + "px"); 
HorizontalPanel redTile = new HorizontalPanel(); 
$(redTile).css("background-color","red"); 
$(redTile).css("width", 100 + "px"); 
$(redTile).css("height", 100 + "px"); 
HorizontalPanel yellowTile = new HorizontalPanel(); 
$(yellowTile).css("background-color","yellow"); 
$(yellowTile).css("width", 100.0 + "px"); 
$(yellowTile).css("height", 100.0 + "px"); 
HorizontalPanel blueTile = new HorizontalPanel(); 
$(blueTile).css("background-color","blue"); 
$(blueTile).css("width", 100.0 + "px"); 
$(blueTile).css("height", 100.0 + "px"); 

horizontalCarousel.addWidget(maroonTile); 
horizontalCarousel.addWidget(greenTile); 
horizontalCarousel.addWidget(redTile); 
horizontalCarousel.addWidget(blueTile); 
horizontalCarousel.addWidget(yellowTile);