2013-04-18 13 views
7

Sto utilizzando unall'interno di un Fragment. Quando scorro questa vista anziché scorrere gli elementi all'interno di HorizontalScrollView, l'intero frammento viene fatto scorrere verso sinistra o verso destra. Ora ho pensato di usare i pulsanti su entrambi i lati del layout. Ma non riesco a ottenere come far scorrere la mia vista di scorrimento su entrambi i lati.Scorrimento di HorizontalScrollView facendo clic sui pulsanti sui lati

Qualsiasi aiuto in questo senso sarà molto apprezzato.

EDIT

seguente è il mio file 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> 

e il mio file java

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. 
      } 
     }); 
    } 
} 

} 

Che cosa ho bisogno

Quando si preme qualsiasi pulsante Visualizza scorrere a sinistra oa destra deve scorrere a sinistra oa destra, rispettivamente, .

+0

Puoi pubblicare il tuo xml? – Catherine

+0

@Catherine si prega di vedere la mia domanda modificata. –

risposta

9

Se si aggiunge la seguente riga di codice al gestore esistente, la vista sarà scorrere verso destra ad ogni scatto del tasto:

rightBtn.setOnClickListener(new View.OnClickListener() { 

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

Se vuoi per scorrere più agevolmente è possibile utilizzare un onTouchListener invece :

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); 
     } 
    }; 
}); 

Variare i ritardi a proprio piacimento per ottenere la fluidità e la reattività che si desidera.

+0

Cosa intendi con questo? – Catherine

+0

come farai scorrere verso sinistra ... come cambiare la posizione in sinistra. Non riesco a scorrere verso sinistra? – nitesh

+0

Anche hsv.getScrollX() dà solo il margine sinistro – nitesh

Problemi correlati