9
votes

TextView au sein de la galerie

J'ai Scrollable textview et Galerie Lorsque j'active le Ontouchevent () pour le textview , je ne peux pas naviguer dans la galerie et si je désactive le Ontouchevent () , je peux faire défiler la droite et la gauche de la galerie mais ne peut pas faire défiler vers le bas dans textview .

J'ai essayé de faire des tours, comme envoyer le même motionEvent () à la fois Galerie et textview .. Des idées comment le résoudre?


1 commentaires

@Nathan Fig, je vais essayer de faire un échantillon.


7 Réponses :


0
votes

au lieu d'Ontchevent Pourquoi n'utilisez-vous pas ONCLICK Event pour TextView Inside Gallery sur MotionEvent


1 commentaires

Je ne manipule pas le Cliquez sur Event, Handling Touchez Événements !!



0
votes

Essayez de définir renvoyer false in inouch.


0 commentaires

0
votes

Il est possible que textview et / ou Galerie s'efforce de se concentrer sur le listview si vous utilisez une ou la capacité de défilement Ainsi, ce qui ne peut pas faire défiler de haut en bas, essayez de supprimer Fonctionnement du TextView and Gallery et de voir si cela aide du tout. Ensuite, vous devriez être capable de toujours utiliser vos Touchevents ... Juste une pensée, je ne sais pas si cela corrigeait cependant le problème. J'aimerais pouvoir être plus d'aide.


0 commentaires

0
votes

Créer une vue personnalisée qui étend une disposition de conteneur et contient votre texte défilableView. Utilisez ceci comme articles de galerie.


0 commentaires

1
votes

Hey, vous devez essayer ce code, il vous aidera dans votre problème

float oldx;
float oldy;

@Override
public boolean onTouchEvent(MotionEvent event) {
    boolean result = false;
    if(event.getAction() == MotionEvent.ACTION_DOWN) {
        result = super.onTouchEvent(event);
    } else if (event.getAction() == MotionEvent.ACTION_UP) {   
        result = super.onTouchEvent(event);
    } else  if (event.getAction() == MotionEvent.ACTION_MOVE) {
        /**
         * Condition :: Math.abs(oldx - event.getX()) > 10 will check weather user had drag horizontal or vertical. 
         * You can change value 10 according to your requirement 
         */
        if(Math.abs(oldx - event.getX()) > 10) {
            result = super.onTouchEvent(event);
        } else {
            result =  true;
        }
    }   
    oldx = event.getX();
    oldy = event.getY();
    return result;
}


0 commentaires

1
votes

Avez-vous essayé d'utiliser ScrollView dans la galerie? Voici quelques exemples de travail: ScrollView Inside Gallery, tous deux défilant de manière indépendante


0 commentaires

1
votes

Ma réponse:

public class CustomGallery extends Gallery {

    public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public CustomGallery(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomGallery(Context context) {
        super(context);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        float r = (velocityX > 0 ? Math.min(800f, velocityX) : Math.max(-800f, velocityX));
        return super.onFling(e1, e2, r, velocityY);
    }

    float oldX, oldY;
    boolean isDown = false;

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                oldX = ev.getX();
                oldY = ev.getY();
                isDown = true;
                return super.onInterceptTouchEvent(ev);

            case MotionEvent.ACTION_MOVE:
                if (isDown) {
                    float diffX = Math.abs(ev.getX() - oldX);
                    float diffY = Math.abs(ev.getY() - oldY) + 20f;
                    if (diffY > diffX) {
                        return false;// handled by TextView
                    }
                }
                return true;// handled by Gallery

            case MotionEvent.ACTION_UP:
                isDown = false;
                return super.onInterceptTouchEvent(ev);

            default:
                return super.onInterceptTouchEvent(ev);
        }
    }

}


0 commentaires