2010-09-30 18 views
10

Supongo que todos han intentado con "Google Places" en Maps. Esta es una lista de POI cerca de usted.Android: brújula + distancia en una lista de vista

Realmente me gustaría hacer la misma función en mi aplicación con una lista de coordenadas de GPS, pero parece muy complicado.

Hacer la vista de lista con la distancia y la pequeña flecha es muy fácil, pero no puedo entender cómo actualizar esta lista y la flecha cada vez que el usuario mueva su teléfono.

Por el momento tengo una vista de lista estática.

alt text

Me gustaría saber si alguien tiene éxito al crear una vista de lista tales.

Muchas gracias por cualquier información.

Respuesta

10

Hay algunas opciones para lo que estás tratando de lograr. Personalmente, recomendaría implementar su propio Adaptador (lo más probable es que en este caso extienda el SimpleCursorAdapter) y encapsular las actualizaciones del texto a distancia y la rotación del encabezado de la brújula dentro de ese.

Para ayudar con la gestión de recursos, es probable que desee crear un SensorListener y LocationListener dentro de la actividad que alojará el ListView. Siempre que reciba una actualización, llame a su método updateCompassAndLocation auto rodado desde su clase de Adaptador.

Desde ese método, tiene dos opciones. Repita sobre cada uno de los elementos que componen la colección de datos que se representa y modifique el gráfico de la brújula y el texto a distancia, o simplemente registre la ubicación y el rumbo actuales como variables dentro de la clase, y llame al notifyDataSetChanged para forzar al adaptador a actualizar las vistas dentro del método getView. En cualquier caso (especialmente este último), deberá establecer los valores de texto de la distancia y brújula del encabezado dentro de getView.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LinearLayout myView; 

    MyPOI item = getItem(position); 

    Location poiLocation = item.getLocation; 

    int compassHeading = // Calculate heading relative to current heading 
    float distance = // Calculate distance to POI 


    if (convertView == null) { 
    myView = new LinearLayout(getContext()); 
    String inflater = Context.LAYOUT_INFLATER_SERVICE; 
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater); 
    vi.inflate(resource, myView, true); 
    } else { 
    trainView = (LinearLayout) convertView; 
    } 

    TextView distanceView = (TextView)trainView.findViewById(R.id.distance); 
    ImageView compassView = (ImageView)trainView.findViewById(R.id.compass); 

    distanceView.setText(String.valueOf(distance); 
    compassView.setImageLevel(compassHeading); 
} 
+0

Disculpa la demora. Intenté tu solución hace unos meses y estuve muy satisfecho con ella. ¡Muchas gracias! –

+0

@Waza_Be sería genial si puede publicar la solución que ha implementado para esto, también estoy tratando de hacer lo mismo, estoy enfrentando problemas con la rotación del rumbo de la brújula. Gracias .. – dharan

Cuestiones relacionadas