TextView в галерее - PullRequest
       83

TextView в галерее

9 голосов
/ 14 июля 2011

У меня есть прокрутка TextView и Gallery когда я включаю onTouchEvent() для TextView, я не могу перемещаться по Gallery и если я отключу onTouchEvent(), я могу прокрутить вправо и влево по Gallery но не могу прокрутить вниз до TextView.

Я пытался делать трюки, например отправлять один и тот же MotionEvent() на оба Gallery И TextView .. есть идеи как это решить?

Ответы [ 7 ]

1 голос
/ 09 августа 2011

Вы пробовали использовать ScrollView в галерее?Вот несколько рабочих примеров: ScrollView внутри галереи, обе прокручиваются независимо

1 голос
/ 09 августа 2011

мой ответ:

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);
        }
    }

}

спасибо за @teepee за огромную подсказку для решения: D

1 голос
/ 08 августа 2011

Эй, вы должны попробовать этот код, он поможет вам в вашей проблеме

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 голосов
/ 08 августа 2011

Создайте пользовательское представление, расширяющее макет контейнера и содержащее прокручиваемый TextView. Используйте это как свои элементы галереи.

0 голосов
/ 27 июля 2011

возможно, что TextView и / или Gallery отводят фокус от ListView, если вы используете одну из них или возможность прокрутки, таким образом, делая невозможным прокрутку вверх и вниз, попробуйте удалить фокусировку для TextView и Галерея и посмотреть, поможет ли это вообще. Тогда вы сможете использовать свои touchEvents ... просто подумайте, хотя и не уверены, что это действительно решит проблему. Хотелось бы мне больше помочь.

0 голосов
/ 25 июля 2011

попробуйте установить return false в событии onTouch.

0 голосов
/ 14 июля 2011

за исключением события onTouch, почему бы вам не использовать событие onclick для просмотра текста внутри галереи onMotionEvent

...