首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tabris:使用Swipe实现滚动组件的正确方法

Tabris:使用Swipe实现滚动组件的正确方法
EN

Stack Overflow用户
提问于 2014-01-31 19:52:56
回答 1查看 416关注 0票数 1

我尝试使用滚动复合(垂直滚动)与使用手势(滑动)的分页导航相结合。

我的应用程序在Android模拟器上运行良好(试用了Android 4.0.3,4.1.2,4.3 ),但我的手机ZTE Blade III,Androind OS 4.0.4遇到了问题。无论方向如何,滑动都不起作用HTC Desire with Android 4.4在横向滑动时有问题

我是不是做错了什么。

我使用SwipeDemo入口点(从选项卡)进行了测试。

代码语言:javascript
复制
  private void createSwipeWidget( Composite parent ) {
    final ScrollingComposite scrollableParent = new ScrollingComposite( parent, SWT.V_SCROLL );
    scrollableParent.setLayout( GridLayoutFactory.fillDefaults().create() );
    scrollableParent.setLayoutData( GridDataFactory.fillDefaults()
      .grab( true, true )
      .align( SWT.FILL, SWT.FILL )
      .create() );

    Swipe result = new Swipe( scrollableParent, new DictionarySwipeItemProvider() );
    GridDataFactory.fillDefaults()
      .grab( true, true )
      .align( SWT.FILL, SWT.FILL )
      .applyTo( result.getControl() );
    result.show( 0 );
  }

另外,在com.eclipsesource.tabris.demos.swipe.DictionarySwipeItem中,我在createTitleLabel方法中给出了提示.hint( SWT.DEFAULT, 500 ),以便启用垂直滚动。

提前感谢

编辑:添加全新的示例/片段

代码语言:javascript
复制
    import org.eclipse.jface.layout.GridDataFactory;
    import org.eclipse.jface.layout.GridLayoutFactory;
    import org.eclipse.rap.rwt.application.EntryPoint;
    import org.eclipse.rap.rwt.application.EntryPointFactory;
    import org.eclipse.swt.SWT;
    import org.eclipse.swt.widgets.Composite;
    import org.eclipse.swt.widgets.Control;
    import org.eclipse.swt.widgets.Label;

    import com.eclipsesource.tabris.ui.AbstractPage;
    import com.eclipsesource.tabris.ui.PageConfiguration;
    import com.eclipsesource.tabris.ui.PageData;
    import com.eclipsesource.tabris.ui.TabrisUIEntryPoint;
    import com.eclipsesource.tabris.ui.UIConfiguration;
    import com.eclipsesource.tabris.widgets.ScrollingComposite;
    import com.eclipsesource.tabris.widgets.swipe.Swipe;
    import com.eclipsesource.tabris.widgets.swipe.SwipeContext;
    import com.eclipsesource.tabris.widgets.swipe.SwipeItem;
    import com.eclipsesource.tabris.widgets.swipe.SwipeItemProvider;

    public class SwipeScrollSnippet implements EntryPointFactory {

      @Override
      public EntryPoint create() {
        return new TabrisUIEntryPoint( createConfiguration() );
      }

      private UIConfiguration createConfiguration() {
        UIConfiguration configuration = new UIConfiguration();
        /*
         * Page with Vertical scroll and swipe component. Swiping does not work at
         * all.
         */
        PageConfiguration page1 = new PageConfiguration( SwipePageWithScroll.class.getName(),
                                                         SwipePageWithScroll.class );
        page1.setTitle( "Swipe page" );
        page1.setTopLevel( true );
        configuration.addPageConfiguration( page1 );
        return configuration;
      }
      /**
       * Page with scroll and swipe components
       */
      public static class SwipePageWithScroll extends AbstractPage {

        /**
         * Creating content of a page with scrolling component and swipe object
         */
        public void createContent( final Composite parent, final PageData data ) {
          final ScrollingComposite scrollableParent = createScrollParent( parent );
          createSwipe( scrollableParent );
        }

        protected ScrollingComposite createScrollParent( final Composite parent ) {
          parent.setLayout( GridLayoutFactory.fillDefaults().numColumns( 1 ).spacing( 0, 0 ).create() );
          final ScrollingComposite scrollableParent = new ScrollingComposite( parent, SWT.V_SCROLL );
          scrollableParent.setLayoutData( GridDataFactory.fillDefaults().grab( true, true ).create() );
          scrollableParent.setLayout( GridLayoutFactory.fillDefaults().create() );
          scrollableParent.setBackground( getUI().getDisplay().getSystemColor( SWT.COLOR_GRAY ) );
          return scrollableParent;
        }

        public Swipe createSwipe( Composite oParent ) {
          Swipe result = new Swipe( oParent, new SimpleSwipeItemProvider() );
          result.getControl().setBackground( getUI().getDisplay().getSystemColor( SWT.COLOR_YELLOW ) );
          GridDataFactory.fillDefaults()
            .grab( true, true )
            .align( SWT.FILL, SWT.FILL )
            .applyTo( result.getControl() );
          return result;
        }
      }
      /**
       * 
       */
      public static class SimpleSwipeItemProvider implements SwipeItemProvider {

        @Override
        public SwipeItem getItem( int oIndex ) {
          return new SimpleSwipeItem( oIndex );
        }

        @Override
        public int getItemCount() {
          return 3;
        }
      }
      /**
       * 
       */
      public static class SimpleSwipeItem implements SwipeItem {

        private int index;

        public SimpleSwipeItem( int oIndex ) {
          super();
          this.index = oIndex;
        }

        @Override
        public Control load( Composite oParent ) {
          Composite composite = new Composite( oParent, SWT.BORDER );
          composite.setLayout( GridLayoutFactory.fillDefaults().create() );
          Label label = new Label( composite, SWT.None );
          label.setText( "Swipe item " + index );
          label.setLayoutData( GridDataFactory.swtDefaults()
            .grab( true, true )
            .hint( SWT.DEFAULT, 500 )
            .align( SWT.CENTER, SWT.CENTER )
            .create() );
          Label bottomLabel = new Label( composite, SWT.None );
          bottomLabel.setText( "Try to swipe" );
          bottomLabel.setLayoutData( GridDataFactory.swtDefaults()
            .grab( true, true )
            .align( SWT.CENTER, SWT.CENTER )
            .create() );
          return composite;
        }

        @Override
        public boolean isPreloadable() {
          return false;
        }

        @Override
        public void deactivate( SwipeContext oContext ) {
        }

        @Override
        public void activate( SwipeContext oContext ) {
        }
      }
    }
EN

回答 1

Stack Overflow用户

发布于 2014-02-03 22:26:41

对我来说,它也适用于模拟器(经过测试的Android SDK和Genymotion),但对于真实设备,我也注意到了问题:在摩托罗拉Razr i不起作用,在HTC Desire和基于Android 4.4.2的Cynogenmod上,它只能在纵向方向上工作,而在横向方向上不能。在华硕fonepad上,两个方向都工作得很好。

举个例子:

  1. 克隆存储库https://github.com/eclipsesource/tabris-demos.git
  2. use 1.2.1 Tabris目标平台
  3. apply changes from entry
  4. 测试滑动演示(入口点/swipe)

================================================================================== SwipeDemo.java

代码语言:javascript
复制
import com.eclipsesource.tabris.widgets.ScrollingComposite;

private void createSwipeWidget( Composite parent ) {
    final ScrollingComposite scrollableParent = new ScrollingComposite( parent, SWT.V_SCROLL );
    scrollableParent.setLayout( GridLayoutFactory.fillDefaults().create() );
    scrollableParent.setLayoutData( GridDataFactory.fillDefaults()
      .grab( true, true )
      .align( SWT.FILL, SWT.FILL )
      .create() );
    Swipe result = new Swipe( scrollableParent, new DictionarySwipeItemProvider() );
    GridDataFactory.fillDefaults()
      .grab( true, true )
      .align( SWT.FILL, SWT.FILL )
      .applyTo( result.getControl() );
    result.show( 0 );
  }

================================================================================== DictionarySwipeItem.java

代码语言:javascript
复制
private void createTitleLabel( Composite parent ) {
    Label titleLabel = new Label( parent, SWT.WRAP );
    GridDataFactory.fillDefaults()
      .align( SWT.CENTER, SWT.TOP )
      .grab( true, true )
      .hint( SWT.DEFAULT, 500 )
      .applyTo( titleLabel );
    titleLabel.setForeground( parent.getDisplay().getSystemColor( SWT.COLOR_DARK_GRAY ) );
    titleLabel.setText( "Lesson " + ( index + 1 ) );
    titleLabel.setFont( new Font( parent.getDisplay(), new FontData( "Arial", 30, SWT.BOLD ) ) );
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21479443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档