Afficher la direction du lieu avec la flèche dans Android ListView

J'ai l'obligation de montrer la liste de certains endroits dans Android ListView avec la direction de cet endroit. Je suis en mesure de trouver l'angle entre les emplacements, mais le problème est que Mon client a exigé que la flèche soit tournée lorsque le périphérique a été tourné ou déplacé. J'ai échoué à trouver une solution qui fera pivoter la flèche selon les changements de capteurs. Est-ce que l'un d'entre eux exige une telle exigence? Suggérez-moi une solution pour que la liste soit affichée comme ceci dans cette application iPhone . Ou regardez l'image ci-dessous.

ACTUALISÉ:

  • OnKeyDown dans un service? (Global Keys)
  • Aucun fichier R.java généré dans mon projet
  • ProGuard ne fonctionne pas comme prévu après la mise à jour de Android Studio
  • Android: activation et services
  • Obtenir android.content.res.Resources $ NotFoundException: exception même lorsque la ressource est présente dans Android
  • Utilisation de Android PlaceFilter avec Google Places API
  • Je m'attends à une réponse telle qu'il sera utile de commencer l'exigence ci-dessous. Même l'affichage de la flèche seule est bienvenu, afin que je tente d'obtenir ce qui suit. Tous les échantillons que j'ai faits sont tremblants et ils ne sont pas stables.

    Entrez la description de l'image ici

  • Appariement Bluetooth Android
  • Comment utiliser la nouvelle fonctionnalité Android M de "Sélection de texte" pour être offert en dehors de votre application?
  • CoordinatorLayout à l'intérieur d'un autre CoordinatorLayout
  • Google Api et Android Oauth INVALID_AUDIENCE erreur
  • Mise en veille du mode avion via ADB
  • Les limites de l'API Google Maps s'appliquent-elles aux applications Android?
  • 2 Solutions collect form web for “Afficher la direction du lieu avec la flèche dans Android ListView”

    Demandez à votre adaptateur de contenir une collection d'objets contenant toutes les informations souhaitées sur chaque élément de liste, y compris une valeur flottante pour la rotation de la flèche.

     public class Place { private Srting name; private double distance; private float arrowAngle; //-- etc etc-- 

    Remplacer la getView() l' getView() , définir la rotation de la flèche Affichage:

     @Override public View getView(View currentView, int position, ViewGroup parent){ //--inflate layout for each row, find views, set values etc etc-- Place p = getItem(position); arrowView.setRotation(p.getArrowAngle()); //--return inflated view -- } 

    Sur le changement de capteur, calculez l'angle nouveau de chaque flèche et mettez à jour chacun des objets de données de votre adaptateur.

     for (int i = 0 ; i < adapter.getCount(); i++){ Place p = adapter.getItem(i); //--calculate angle-- p.setArrowAngle(newAngle); } adapter.notifyDataSetChanged(); 

    Cela permettrait de le faire, mais les capteurs peuvent changer très rapidement et trop de mises à jour des données ListView entraîneront la décalage de ListView, pour limiter les mises à jour, déclarer une long variable lastUpdated , Sur le changement de capteur, voir si System.nanoTime() - lastupdated > 500 , puis N'appelez que le code de mise à jour ci-dessus. Cela limitera les mises à jour à un intervalle de 500 millisecondes.

    Dans votre gestionnaire d'événements de changement de capteur, appelez ListView.invalidateViews() . Cela entraînera l'ensemble des vues existantes dans ListView à redessiner. Donc, si vous êtes actuellement au point où vous pouvez dessiner la liste correctement et obtenir des événements à partir des capteurs que vous le souhaitez, puis ajouter cet appel devrait vous proposer le comportement que vous voulez.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.