2 votes

Android - carte dans l'en-tête de la liste

Dans mon application, j'ai une activité qui contient une image et une liste en bas. Voici ce qu'il faut faire dans l'activité.

1. the image view at the top of the page must be of swipe type to show other images.
2. when the list view gets scrolled the image must get moved along with it.
3. in the same activity i have a button, when the button is clicked the image must be switcher over to be a mapview.

Ce que j'ai fait, c'est

1. I have the image view and mapview in view switcher of a separate layout named as header
2. The header layout is been added in the list view header part.

Maintenant, lorsque la liste défile, l'en-tête défile également, de la même manière, lorsque l'affichage est modifié, je peux passer de l'affichage de l'image à l'affichage de la carte. Mais la carte semble être fixe et ne peut pas être déplacée pour voir différents points.

Comment se déplacer à l'intérieur de la vue carte de l'en-tête de la vue liste.

0voto

Warpzit Points 11150

Il s'agit d'un exemple, mais pas d'une solution. Dans cet exemple, j'ai créé une vue de défilement personnalisée qui renvoie un faux lorsqu'on la fait défiler dans la direction x (ce qui indique que l'événement n'a pas été traité et qu'il doit être transmis à la vue suivante) :

public class CustomScrollView extends ScrollView {
    private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    public CustomScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mGestureDetector = new GestureDetector(new YScrollDetector());
        setFadingEdgeLength(0);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
    }

    // Return false if we're scrolling in the x direction  
    class YScrollDetector extends SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
            if(Math.abs(distanceY) > Math.abs(distanceX)) {
                return true;
            }
            return false;
        }
    }
}

Vous devez faire quelque chose de similaire dans une certaine région de votre viewwitcher. Vous devez donc modifier le composant de base du visualiseur et créer votre propre variante.

Comme alternative à la suggestion ci-dessus, j'envisagerais de ne pas le faire. Si vous regardez les applications autour de l'utilisation des cartes, ce n'est vraiment pas un comportement normal et je doute que cela fonctionne de manière fluide ou que l'interaction avec l'utilisateur soit bonne. Les cartes en général fonctionnent mieux lorsqu'elles ont le plus d'espace possible. Jetez un coup d'œil à quelques applications cartographiques de base : Google Navigation, Google Maps, Google latitude, Yelp.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X