2013-04-18 2 views
7

Fragment 내에 HorizontalScrollView을 사용하고 있습니다. HorizontalScrollView 내의 항목을 스크롤하는 대신이보기를 스크롤하면 전체 조각이 왼쪽 또는 오른쪽으로 스크롤됩니다. 이제는 레이아웃의 양쪽에 버튼을 사용할 생각을했습니다. 그러나 양쪽에서 내 스크롤보기를 스크롤하는 방법을 가져올 수 없습니다.양쪽에있는 단추를 클릭하여 HorizontalScrollView 스크롤하기

이와 관련하여 도움을 주시면 감사하겠습니다. 다음

편집

내 XML 파일입니다.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

<ImageButton 
    android:id="@+id/btn_left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:src="@drawable/left_arrow" /> 

<ImageButton 
    android:id="@+id/btn_right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:src="@drawable/right_arrow" /> 

<HorizontalScrollView 
    android:id="@+id/horizontal_scrollview" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_toLeftOf="@id/btn_right" 
    android:layout_toRightOf="@id/btn_left" 
    android:fadeScrollbars="false" 
    android:padding="5dp" 
    android:scrollbarAlwaysDrawHorizontalTrack="true" 
    android:scrollbars="horizontal" > 

    <LinearLayout 
     android:id="@+id/dynamic_generation" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 
    </LinearLayout> 
</HorizontalScrollView> 

내 자바 파일

public class MyGallery extends Activity { 

private LinearLayout linearLayout; 

private ImageButton leftBtn; 
private ImageButton rightBtn; 
private HorizontalScrollView hsv; 
int currentScrollX = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.horizontalscrolling); 

    leftBtn = (ImageButton) findViewById(R.id.btn_left); 
    rightBtn = (ImageButton) findViewById(R.id.btn_right); 
    hsv = (HorizontalScrollView) findViewById(R.id.horizontal_scrollview); 
    linearLayout = (LinearLayout) findViewById(R.id.dynamic_generation); 

    leftBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
     } 
    }); 

    rightBtn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
     } 
    }); 

    String[] users = new String[20]; 
    for (int i = 0; i < 20; i++) { 
     users[i] = "user " + (i + 1); 
    } 

    for (int i = 0; i < users.length; i++) { 
     final TextView userId = new TextView(MyGallery.this); 
     userId.setText(users[i]); 
     ImageView imageView = new ImageView(MyGallery.this); 
     linearLayout.addView(userId); 
     linearLayout.addView(imageView); 
     userId.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(MyGallery.this, 
         userId.getText() + " has been clicked!", 
         Toast.LENGTH_LONG).show(); 
       // hsv. 
      } 
     }); 
    } 
} 

} 

내가 무엇이 필요

나는 왼쪽 또는 오른쪽 버튼 스크롤 뷰의 오른쪽 각각 왼쪽 또는 스크롤합니다 누르면 . 기존 처리기에 다음 코드 줄을 추가하는 경우

+0

xml을 게시 할 수 있습니까? – Catherine

+0

@ 캐서린 내 편집 된 질문을 참조하십시오. –

답변

9

,보기 바로 모든 버튼 클릭으로 스크롤 :

rightBtn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     hsv.scrollTo((int)hsv.getScrollX() + 10, (int)hsv.getScrollY()); 
    } 
}); 

을 당신이 더 부드럽게 스크롤하려는 경우 당신이 대신 onTouchListener를 사용할 수 있습니다 :

rightBtn.setOnTouchListener(new View.OnTouchListener() { 

    private Handler mHandler; 
    private long mInitialDelay = 300; 
    private long mRepeatDelay = 100; 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       if (mHandler != null) 
        return true; 
       mHandler = new Handler(); 
       mHandler.postDelayed(mAction, mInitialDelay); 
       break; 
      case MotionEvent.ACTION_UP: 
       if (mHandler == null) 
        return true; 
       mHandler.removeCallbacks(mAction); 
       mHandler = null; 
       break; 
     } 
     return false; 
    } 

    Runnable mAction = new Runnable() { 
     @Override 
     public void run() { 
      hsv.scrollTo((int) hsv.getScrollX() + 10, (int) hsv.getScrollY()); 
      mHandler.postDelayed(mAction, mRepeatDelay); 
     } 
    }; 
}); 

원하는대로 부드럽고 반응성을 얻기 위해 지연을 다양하게하십시오.

+0

그게 무슨 뜻이야? – Catherine

+0

왼쪽에서 왼쪽으로 스크롤하는 방법 leftBtn에서 위치를 변경하면 왼쪽으로 스크롤 할 수 없습니까? – nitesh

+0

또한 hsv.getScrollX()는 왼쪽 가장자리 만 제공합니다. – nitesh

관련 문제