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É:

  • Comment spécifier l'identifiant lorsque les utilisations incluent le fichier xml de mise en page
  • Drawable => niveaux de gris
  • Objet d'application Android
  • Studio Android: l'émulateur est en cours d'exécution mais ne s'affiche pas dans Run App "choisissez un périphérique en cours"
  • Enregistrement des données d'application Android dans Google Cloud
  • La valeur de 'keystore' n'est pas valide. Il doit se résoudre à un seul chemin
  • 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

  • Détection du commutateur GPS on / off dans les téléphones Android
  • Utilisation de RxJava et Okhttp
  • Comment utiliser les actions à partir de la notification sans activité de démarrage
  • Erreur lors de l'appel Appregistry.runApplication in-reactive-native
  • Showcase View text gravity
  • Android Studio ne sait pas où est Java
  • 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.