2011-11-07 12 views
5

Tengo un simple ListView que contiene un conjunto de TextViews.Podemos controlar la posición final de una aventura en un ListView

Siempre quiero la parte superior de un TextView en la parte superior de la página.

Puedo usar onScrollStateChanged y ajustar un poco la posición en SCROLL_STATE_IDLE. (similar a List view snap to item)
Pero esta es una corrección a-posteriori que no funciona muy bien.

¿Es posible controlar, a priori, la posición final de una aventura?
Así que quiero modificar la posición final de una aventura tan pronto como se inicia la aventura.

¿Esto es posible?

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 

public class Test extends Activity 
{ 
private final static int N = 20;//number of HorizontalScrollView 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    LinearLayout layout = new LinearLayout(this); 
    //add a ListView 
    ListView list = new ListView(this); 
    layout.addView(list); 
    list.setAdapter(new BaseAdapter() 
    { 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      TextView t = new TextView(Test.this); 
      t.setText("line "+position); 
      t.setMinimumHeight(120); 
      return t; 
     } 

     @Override 
     public long getItemId(int position) 
     { 
      return 0; 
     } 

     @Override 
     public Object getItem(int position) 
     { 

      return null; 
     } 

     @Override 
     public int getCount() 
     { 
      return N; 
     } 
    }); 

    setContentView(layout); 

} 


} 
+1

¿alguna vez encontrar una solución? – rekire

+0

sí, ver respuesta debajo –

+0

Finalmente una respuesta. ¡Estupendo! Desafortunadamente no recuerdo por qué lo necesitaba :-D – rekire

Respuesta

1

La aventura sigue las leyes de la física básica: Let s (distancia), v (velocidad), t (tiempo) y un (aceleración de la desaceleración).

Para una velocidad inicial dada (a partir de S_0 = 0), tenemos

v(t) = a*t + v_0 (1) 
s(t) = a*t^2+v*t (2) 

A es una constante del sistema (no sé de memoria que API). Por lo tanto puede calcular, para una velocidad inicial dada v_0

  • a partir de (1): la t para los que v (t) se convertirá en cero (=> final de la aventura)
  • a partir de (2): la distancia resultante

invirtiendo el cálculo, se puede calcular la velocidad inicial necesario para terminar en una posición de 's'

Cuestiones relacionadas