Как я могу перетащить вид по горизонтали? - PullRequest
3 голосов
/ 25 октября 2011

В элементах управления, таких как ListView и Gallery, вы можете перетаскивать элементы в одном направлении по вертикали или горизонтали.

У меня есть TextView, который я успешно перетаскиваю.Но я хочу переместить его в горизонтальном направлении.как я могу это реализовать?

Спасибо,

мой код:

public class MyDragShadowBuilder extends View.DragShadowBuilder {
    private static View view;

    public MyDragShadowBuilder(View v) {
        super(v);
        view = v;
    }

    @Override
    public void onProvideShadowMetrics(Point size, Point touch) {
        width = getView().getWidth();
        height = getView().getHeight();
        size.set(width, height);
        touch.set(width / 2, height / 2);
    }

    private int width, height;

    @Override
    public void onDrawShadow(Canvas canvas) {
        view.draw(canvas);
    }
}

в моей деятельности:

tv.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            ClipData data = ClipData.newPlainText("dot",
                    "Dot : " + v.toString());
            View.DragShadowBuilder myShadow = new MyDragShadowBuilder(v);
            v.startDrag(data, myShadow,(Object) v, 0);
            return false;
            }
        });

Я хочу смоделироватьГалерея.У меня есть 10000 фотографий, чтобы показать это.Моя галерея может показать 10 фотографий.Я хочу перетащить LinearLayout моей галереи, который содержит содержимое галереи по горизонтали, и когда LinearLayout достигнет конца окна, такого как SlidingDrawer, измените его содержимое и покажите следующие 10 фотографий.SlidingDrawer - хорошее решение, но оно имеет некоторые ограничения.Когда вы устанавливаете весь LinearLayout в качестве дескриптора , он не может быть нажат.Когда вы устанавливаете для него отдельный дескриптор , вы не можете определить положение handle относительно содержимого .

Ответы [ 5 ]

7 голосов
/ 20 сентября 2014

Начиная с совета Блюфалкона, я придумал что-то вроде:

// in onCreate of the containing view
dragButton.setOnTouchListener(new DragExperimentTouchListener(dragButton.getX(), dragButton.getY()));

...

public class DragExperimentTouchListener implements View.OnTouchListener {

    public DragExperimentTouchListener(float initalX, float initialY) {
        lastX = initalX;
        lastY = initialY;
    }

    boolean isDragging = false;
    float lastX;
    float lastY;
    float deltaX;

    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {

        int action = arg1.getAction();

        if (action == MotionEvent.ACTION_DOWN && !isDragging) {
            isDragging = true; 
            deltaX = arg1.getX();
            return true;
        } else if (isDragging) {
            if (action == MotionEvent.ACTION_MOVE) {

                arg0.setX(arg0.getX() + arg1.getX() - deltaX);
                arg0.setY(arg0.getY());
                return true;
            } else if (action == MotionEvent.ACTION_UP) {
                isDragging = false;
                lastX = arg1.getX();
                lastY = arg1.getY();
                return true;
            } else if (action == MotionEvent.ACTION_CANCEL) {
                arg0.setX(lastX);
                arg0.setY(lastY);
                isDragging = false;
                return true;
            }
        }

        return false;
    }
}
3 голосов
/ 24 января 2012

Если вы хотите использовать прокрутку, используйте вид горизонтальной прокрутки, как предлагают остальные.

Но если вы имеете в виду перетаскивание, как в «перетаскивании», то вы можете сделать следующее.

  • Настройка сенсорного прослушивателя на TextView
  • Прослушивание всех событий после ACTION_DOWN и событий ACTION_MOVE
  • Получение позиции x и y извышеупомянутые события
  • используют API setTop и setLeft и устанавливают для них x и y, вы получаете
  • , затем вызываете invalidate для всего вида

Это должно перетащить элемент пользовательского интерфейса по экрану.

3 голосов
/ 21 января 2012

Горизонтальная прокрутка - это самый простой вариант горизонтального перетаскивания в Android ...

ГОРИЗОНТАЛЬНЫЙ ВИД СВИТОК

Попробуйте это .... и внутри указанного, дайте textview или любые макеты или виджеты, которые вы предпочитаете использовать ... и это будет работать даже для динамических процедур ...

1 голос
/ 23 января 2012

HorizontalScroll view является идеальным решением для этого, обратитесь к блогу здесь http://android -coding.blogspot.com / 2011/01 / Scrollview-и-horizontalscrollview.html

0 голосов
/ 01 февраля 2012

Вы можете использовать горизонтальную прокрутку для эмуляции горизонтальной скользящей галереи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...