2013-04-18 2 views
7

Я использую HorizontalScrollView в пределах Fragment. Когда я просматриваю этот вид вместо прокрутки элементов в пределах HorizontalScrollView, весь фрагмент прокручивается влево или вправо. Теперь я подумал об использовании кнопок с обеих сторон макета. Но не могу получить, как прокрутить мой вид прокрутки с обеих сторон.Прокрутка горизонтальногоScrollView путем нажатия кнопок по бокам

Любая помощь в этом отношении будет высоко оценена.

EDIT

Ниже мой файл 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

@ Кэтрин, пожалуйста, см. Мой отредактированный вопрос. – 2013-04-18 10:29:04

ответ

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

Смежные вопросы