2014-01-30 56 views
2

我試圖在我的應用中實現垂直導航(可以上下滑動的全屏幕碎片)。問題是,沒有可能爲android ViewPager設置垂直方向,所以我使用了實際工作的Jake's Wharton DirectionalViewPager,但我無法將pageTransformer應用於它(它只是沒有在那裏實現,而且功能實現修復對我來說太難了做)。 DirectionalViewPager不再受支持。所以我的問題是:viewpager是解決這種UI問題的最佳解決方案,或者我應該使用另一種更容易且更容易應用的方法?我在android編程中總是新手(我從javascript開發來到這裏),我需要一些建議。也許有人有類似的問題,並以某種方式解決它? 在此先感謝!如何以最平易近人的方式應用垂直滑動導航?

+0

該ViewPager它實際上是一個相對較新的組件,對不起我的無知,但我從來沒有使用過這個組件,你想完成什麼?也許你可以使用另一個組件...只是想了解,所以我可以幫助更多 – GhostDerfel

+0

嗨!感謝您的回覆。我想要實現的實際上與GIF示例中所示的相同(但是在垂直方向上):http://developer.android.com/training/animation/screen-slide.html – lukaleli

+0

聽起來很棒建議以不同的方式做到這一點。也許ScrollView可以執行該操作? – lukaleli

回答

1

你可以試試很多不同的東西。

第一件事是讓你想要在佈局中滾動的所有組件。 喜歡的東西:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/welcome_first_slide" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone" /> 

    <LinearLayout 
     android:id="@+id/welcome_second_slide" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone" /> 

</RelativeLayout> 

然後,你將實現該方法來管理您的活動內容:

private void setCurrentSliderItem(int position){ 
    LinearLayout currentView = null; 
    switch (position) { 
     case 0: 
       mainSlideView = (LinearLayout) findViewById(R.id.welcome_first_slide); 
       break; 
      case 1: 
      mainSlideView = (LinearLayout) findViewById(R.id.welcome_second_slide); 
      break; 
    } 
    mainSlideView.bringToFront(); 
    Animation slide = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 1.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f,Animation.RELATIVE_TO_PARENT, 0.0f); 
    slide.setDuration(1000); 
    mainSlideView.startAnimation(slide); 
} 

,然後你會CONTROLE觸摸事件,使用戶可以交互:

private float xWhenDown; 

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     int action = MotionEventCompat.getActionMasked(event); 
     switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      xWhenDown = event.getX(); 
     case MotionEvent.ACTION_UP: 
      if(event.getX()<xWhenDown){ 
       buildSlide(++currentPosition); 
      } 
     default: 
      return super.onTouchEvent(event); 
     } 
    } 
+0

感謝您的建議!我會嘗試一下,然後回來給出反饋。但是我擔心這會不夠靈活。它可能會導致一些內存問題,因爲很多頁面(這是非常可能的情況)。 ViewPager例如。當它們不在屏幕上時會破壞頁面以有效地管理內存。 – lukaleli

+0

你可以在活動類中做所有的通貨膨脹,然後你不需要在XML上設置內容......在我的答案中將內容放在XML中以簡化代碼:P – GhostDerfel