2012-03-25 179 views
1

如何使horizo​​ntalscrollview移動靠近屏幕中心的相對物體? 像中的圖片:horizo​​ntalscrollview重力

enter image description here

+0

你能改一下你的問題嗎?目前還不清楚你在問什麼,圖片沒有提供說明。 – 2012-03-25 15:56:40

+0

我不會這樣:http://android.amberfog.com/?p=678 但是當只有一個頁面(圖片)可以在屏幕上看到 – Leo 2012-03-25 15:58:24

回答

0

我在news-parser示例中找到解決方案。我的代碼:

....

gestureDetector = new GestureDetector(new MyGestureDetector()); 
     hs = (HorizontalScrollView) findViewById(R.id.hs); 
     hs.setOnTouchListener(new OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if (gestureDetector.onTouchEvent(event)) { 
        return true; 
       } 
       if (event.getAction() == 1) 
       { 
        if (hs.getScrollX() > mWidth * 8 + mWidth/2) 
        { 
         hs.smoothScrollBy(mWidth * 9 - hs.getScrollX(), 0); 
        } 
        else if (hs.getScrollX() > mWidth * (cN - 2) + mWidth/2) 
        { 
         hs.smoothScrollBy(mWidth * (cN - 1) - hs.getScrollX(), 0); 
        } 
        else if (hs.getScrollX() > mWidth/2) 
        { 
         hs.smoothScrollBy(mWidth - hs.getScrollX(), 0); 
        } 
        else 
        { 
         hs.smoothScrollBy(-hs.getScrollX(), 0); 
        } 
        return true; 
       } 
       return false; 
      } 
     }); 
    } 


    class MyGestureDetector extends SimpleOnGestureListener { 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 
      //Log.v("e1.getX()", Float.toString(e1.getX())); 
      //Log.v("e2.getX()", Float.toString(e2.getX())); 
      //Log.v("velocityX", Float.toString(velocityX)); 
      if (velocityX > 0) { 
       moveLeft(); 
      } else { 
       moveRight(); 
      } 
      return true; 
     } 
    } 

    private void moveRight() { 
     if (hs.getScrollX() > 0 && hs.getScrollX() < mWidth * cN) 
     { 
      hs.smoothScrollBy(mWidth * cN - hs.getScrollX(), 0); 
      cN++; 
     } 
     //Log.v("cN", Integer.toString(cN)); 
    } 

    private void moveLeft() { 

     if (hs.getScrollX() > 0 && hs.getScrollX() < mWidth) 
     { 
      hs.smoothScrollBy(-hs.getScrollX(), 0); 
      cN = 1; 
     } 
     else if (hs.getScrollX() > mWidth && hs.getScrollX() < mWidth * (cN - 1)) 
     { 
      hs.smoothScrollBy(mWidth * (cN - 2) - hs.getScrollX(), 0); 
      cN--; 
     } 
     //Log.v("cN", Integer.toString(cN)); 
    } 
0

Gallery將在該窗口的中心顯示當前項目。有關詳細信息,請參閱Gallery tutorial

您可以動態調整項目的間距,以便通過調用setSpacing(int)填充一個項目。 (但是,如果你想要什麼,例如,該活動在平板電腦上以橫向模式顯示?那將是一個空洞的屏幕。)

+0

但我可以讓這樣的按鈕畫廊? – Leo 2012-03-25 16:19:06

+0

@ user1136218您可以編寫自定義適配器,以便顯示的視圖是按鈕視圖或您喜歡的其他任何東西。 – 2012-03-25 16:24:48

相關問題