2012-03-17 19 views
5

Tengo un programa Android con ScrollView que hará correctamente un desplazamiento automático cuando llamo al método scrollBy en el emulador en mi computadora pero no lo hago en mi teléfono Android.Usando el método smoothScrollBy en la clase ScrollView de Android

Aquí está el código:

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

Además, el método regular scrollBy no funciona o el método scrollTo (aunque puede no sólo a utilizar correctamente ya que eso no funciona en el equipo, ya sea) ¿Alguien tiene una idea de lo que podría estar mal?

EDIT:

Mi problema como la respuesta de Darrell me mostró fue que yo estaba llamando a mi método smoothScrollBy desde dentro de una función en la que yo estaba haciendo cambios en el diseño que haría que el área de desplazamiento suficientemente grande como para ser capaz de estar desplazado. Aparentemente, cuando lo llamé a la función, los cambios no se aplicaron realmente y no se pudo desplazar.

Por lo tanto, he cambiado el código usando su consejo a lo siguiente:

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

Respuesta

8

son usted que llama smoothScrollBy del método onCreate? Intente esperar hasta que se configuren las vistas, por ejemplo desde onResume. (Si debe hacerlo desde onCreate, puede registrar un ViewTreeObserver para su vista con OnGlobalLayoutListener y realizar el desplazamiento desde allí).

+0

OK - No lo estoy haciendo desde el método onCreate, pero lo estoy haciendo en un método en el que solo estoy agregando componentes que lo habilitarían para desplazarse. ¿Cómo puedo usar ViewTreeObserver? –

+0

No importa, descubrí cómo. Muchas gracias por su ayuda. –

2

En mi caso, necesito desplazar el ScrollView cuando hay un evento MotionEvent.ACTION_UP desencadenado en ScrollView exacto, scrollTo() funciona, pero smoothScrollTo() no funciona. Gracias a ustedes, me di cuenta ahora, use un controlador para suavizar. Desplazar la vista después de un tiempo funcionará.

Cuestiones relacionadas