2012-03-17 13 views
5

Ho un programma Android con ScrollView che eseguirà correttamente uno scorrimento automatico quando chiamo il metodo scrollBy sull'emulatore del mio computer ma non lo farò sul mio telefono Android.Utilizzo del metodo smoothScrollBy nella classe Android ScrollView

Ecco il codice:

public class RecordGameActivity3 extends Activity { 
ScrollView myView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.recordgame3); 
    myView = (ScrollView)findViewById(R.id.scrollView1); 

} 

public void addPlayer(View v) 
{ 
    //Removed non-related code 

    myView.smoothScrollBy(0, 50); 
} 
} 

Inoltre, il metodo normale scrollBy non funziona o il metodo scrollTo (anche se può non solo usare quel correttamente dal momento che non funziona sul computer sia). Qualcuno ha un'idea di cosa potrebbe essere sbagliato?

EDIT:

Il mio problema come la risposta di Darrell ha mostrato me era che mi stava chiamando il mio metodo smoothScrollBy all'interno di una funzione in cui stavo facendo modifiche al layout che renderebbe l'area di scorrimento abbastanza grande da poter essere scorrere. Apparentemente, quando l'ho chiamato nella funzione, le modifiche non sono state effettivamente applicate e quindi non è stato possibile scorrere.

Così, ho cambiato il codice utilizzando il suo consiglio al seguente:

public class RecordGameActivity3 extends Activity { 
ScrollView myView; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.recordgame3); 
myView = (ScrollView)findViewById(R.id.scrollView1); 

// New code that listens for a change in the scrollView and then calls the scrollBy method. 
ViewTreeObserver vto = myView.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    public void onGlobalLayout() { 
     myView.smoothScrollBy(0, 100); 
    }}); 

} 

public void addPlayer(View v) 
{ 
    //Code that is called on an onClick listener that adds things to the ScrollView making it scrollable. 
} 
} 

risposta

8

chiami smoothScrollBy dal metodo onCreate? Prova ad aspettare fino a dopo la configurazione delle visualizzazioni, ad esempio da onResume. (Se devi farlo da onCreate puoi registrare un ViewTreeObserver per la tua vista con un OnGlobalLayoutListener, e fare lo scrolling da lì.)

+0

OK: non lo faccio dal metodo onCreate, ma lo sto facendo in un metodo in cui sto solo aggiungendo componenti che consentano di scorrere. Come posso utilizzare ViewTreeObserver? –

+0

Non importa, ho capito come. Grazie mille per il tuo aiuto. –

2

Nel mio caso, ho bisogno di scorrere ScrollView quando c'è un evento MotionEvent.ACTION_UP innescato nell'esatto ScrollView, scrollTo() funziona, ma smoothScrollTo() no. Grazie a voi ragazzi, ho capito ora, utilizzare un gestore per smussare la vista dopo un po 'funzionerà.

Problemi correlati