Je suis vraiment fatigué de chercher une solution pour Scrollview vertical et horizontal.
J'ai lu qu'il n'y a pas de vues / mises en page dans le cadre qui implémentent cette fonctionnalité, mais j'ai besoin de quelque chose comme ceci:
J'ai besoin de définir une mise en page dans l'autre, la mise en page enfant doit implémenter un défilement vertical / horizontal pour le déplacement.
Initialement implémenté un code qui déplaçait la mise en page pixel par pixel, mais je pense que ce n'est pas la bonne façon. Je l'ai essayé avec ScrollView et Horizontal ScrollView mais rien ne fonctionne comme je le souhaite, car il n'implémente que le défilement vertical ou horizontal.
Canvas n'est pas ma solution car j'ai besoin d'attacher des écouteurs à certains éléments enfants.
Que puis-je faire?
la source
Réponses:
En mélangeant certaines des suggestions ci-dessus, nous avons pu obtenir une bonne solution:
ScrollView personnalisé:
HorizontalScrollView personnalisé:
le ScrollableImageActivity:
la disposition:
la source
LinearLayout
je suppose)Comme cela semble être le premier résultat de recherche dans Google pour "Android vertical + horizontal ScrollView", j'ai pensé que je devrais ajouter ceci ici. Matt Clark a construit une vue personnalisée basée sur la source Android, et cela semble fonctionner parfaitement: Two Dimensional ScrollView
Attention, la classe de cette page a un bug de calcul de la largeur horizontale de la vue. Un correctif de Manuel Hilty est dans les commentaires:
Edit: Le lien ne fonctionne plus mais voici un lien vers une ancienne version du blog .
la source
fillViewport
etonMeasure
exactement comme la source ScrollView (v2.1). J'ai également changé les deux premiers constructeurs avec:this( context, null );
etthis(context, attrs, R.attr.scrollViewStyle);
. Avec cela, je peux utiliser la barre de défilement en utilisantsetVerticalScrollBarEnabled
etsetHorizontalScrollBarEnabled
dans le code.J'ai trouvé une meilleure solution.
XML: (design.xml)
Code Java:
Cela fonctionne !!!
Si vous souhaitez charger une autre disposition ou un autre contrôle, la structure est la même.
la source
Je l'utilise et fonctionne très bien:
Le lien source est ici: Android-spa
la source
ImageView
tant que contenu déroulant, elle peut ou non fonctionner pour d'autres contenus arbitraires, et que Google pense qu'il y aura des problèmes avec votre approche. L'opinion de Google est également importante en ce qui concerne le développement futur - ils n'essaient peut-être pas de s'assurer que votre approche fonctionne sur le long terme, s'ils conseillent aux gens de ne pas l'utiliser en premier lieu.Ma solution basée sur la réponse de Mahdi Hijazi , mais sans vues personnalisées:
Disposition:
Code (onCreate / onCreateView):
Vous pouvez modifier l'ordre des vues de défilement. Changez simplement leur ordre dans la mise en page et dans le code. Et évidemment au lieu de WateverViewYouWant vous mettez la mise en page / vues que vous souhaitez faire défiler dans les deux sens.
la source
Option n ° 1: vous pouvez proposer une nouvelle conception d'interface utilisateur qui ne nécessite pas de défilement horizontal et vertical simultané.
Option n ° 2: vous pouvez obtenir le code source vers
ScrollView
etHorizontalScrollView
, découvrir comment l'équipe Android principale les a implémentés et créer votre propreBiDirectionalScrollView
implémentation.Option 3: vous pouvez vous débarrasser des dépendances qui vous obligent à utiliser le système de widgets et dessiner directement sur le canevas.
Option n ° 4: Si vous tombez sur une application open source qui semble implémenter ce que vous cherchez, regardez comment ils l'ont fait.
la source
Essaye ça
la source
puisque le lien Two Dimensional Scrollview est mort, je n'ai pas pu l'obtenir, j'ai donc créé mon propre composant. Il gère le flinging et fonctionne correctement pour moi. La seule restriction est que wrap_content peut ne pas fonctionner correctement pour ce composant.
https://gist.github.com/androidseb/9902093
la source
J'ai une solution à votre problème. Vous pouvez vérifier le code ScrollView, il gère uniquement le défilement vertical et ignore l'horizontale et le modifie. Je voulais une vue comme une vue Web, donc ScrollView modifié et cela a bien fonctionné pour moi. Mais cela peut ne pas répondre à vos besoins.
Faites-moi savoir quel type d'interface utilisateur vous ciblez.
Cordialement,
Ravi Pandit
la source
En jouant avec le code, vous pouvez placer un HorizontalScrollView dans un ScrollView. Ainsi, vous pouvez avoir les deux méthodes de défilement dans la même vue.
Source: http://androiddevblog.blogspot.com/2009/12/creating-two-dimensions-scroll-view.html
J'espère que cela pourra vous aider.
la source
utiliser de cette façon j'ai essayé ceci je l'ai réparé
Mettez toute votre mise en page XML à l'intérieur
J'ai expliqué cela dans ce lien recycler vertical et vue de recyclage horizontale défilant ensemble
la source