2017-04-12 1 views
2

J'ai un problème.Android: clipChildren = false et onClickListner pour les enfants clippés

Nous avons mise en page mise en page de cadre personnalisé avec mise à l'échelle et la traduction de la fonctionnalité

public class MyFrameLayout extends FrameLayout { 
... 
@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    getChildAt(0).setTranslationX(vTranslate.x); 
    getChildAt(0).setTranslationY(vTranslate.y); 
    getChildAt(0).setScaleX(mScale.scaleFactor); 
    getChildAt(0).setScaleY(mScale.scaleFactor); 
} 

La classe à l'écoute des gestes tactiles et des traductions/échelle de son enfant. Je l'utilise en tant que viewgroup parent pour mon ViewGroup avec du contenu.

<MyFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/gray" 
android:clipChildren="false"> 

<android.support.constraint.ConstraintLayout 
    android:id="@+id/calc_constraint_layout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:clipChildren="false"/> 

contenu pour la mise en page de contrainte ajoute programmaticaly et il est plus grand que l'écran ou d'un groupe parent. A cause de cela, nous avons défini clipChildren = false. Mais les enfants qui étaient hors limites avant la transition ne répondent pas aux événements onClick.

Quelques photos:

écran de démarrage enter image description here

Après la traduction: enter image description here

Le nœud 6% ne vient pas répondre aux clics. S'il vous plaît, aidez-moi.

Ajouter: enter image description here

+0

alors quelle est la largeur de 'MyFrameLayout' et' ConstraintLayout'? – pskink

+0

@pskink c'est match_parent. Si j'ai défini la largeur comme 2000dp pour la disposition de contrainte (une blanche) - le récipient sera plus grand et les clics fonctionneront. Dunno, pourquoi ni match_parent ni wrap_content ne fonctionnent pour la disposition de contraintes. Il a toujours les "tailles d'écran" – Kotsu

+0

de sorte que vous pouvez voir les événements sont transmis aux vues enfants si la position de l'événement (x, y) est dans le parent - si elle est en dehors du parent, ils sont simplement ignorés - setTranslation * 'méthodes que vous pourriez essayer' scrollTo'/'scrollBy' - je ne sais pas comment cela fonctionnera avec' setScale * 'tu ... – pskink

Répondre

0

bien. Je n'ai pas trouvé le moyen de faire une mise en page de contrainte (une blanche) pour ajuster le contenu avec la valeur wrap_content. Ma solution de contournement consistait à augmenter dynamiquement la largeur et la hauteur de la disposition de contrainte en conséquence de la largeur et de la hauteur de mon arborescence de nœuds. Lorsque vous ajoutez des mesures de disposition de nœud supplémentaires, vous augmentez et vous voyez comment cela fonctionne. Ensuite, pour le réparer, j'ai dû redéfinir la méthode onLayout() dans la mise en page parent (il est vert sur les captures d'écran, mais il était personnalisé ZoomableLayout).

Et maintenant tout fonctionne bien. Mais je ne suis pas sûr si cette mise en œuvre moche ou pas.