2012-03-25 5 views
1

화면 중심에 가까운 비교적 가까운 물체를 움직이는 horizontalscrollview를 만드는 방법은 무엇입니까? 사진에 등 :horizontalscrollview 중력

enter image description here

+0

당신은 당신의 질문을 바꿔 수 있습니까? 당신이 묻고있는 것이 명확하지 않고 그림이 명확하지 않다. –

+0

나는 여기처럼 만들지 않을 것이다 : http://android.amberfog.com/?p=678 그러나 단 한 페이지 (그림)만이 화면에 보일 때 – Leo

답변

0

뉴스 파서 예제에서 해결책을 찾았습니다. 내 코드 :

는 ....

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

+0

@ user1136218 표시되는보기가 단추보기 또는 다른 어떤 것이되도록 사용자 지정 어댑터를 작성할 수 있습니다. –