Как я могу ограничить флинг в галерее Android одним элементом? - PullRequest
18 голосов
/ 30 ноября 2010

У меня есть галерея с несколькими полноэкранными изображениями.Я хочу ограничить жест кидания, чтобы продвигать только одно изображение за раз (как приложение HTC Gallery).Какой правильный / самый простой способ достичь этого?

Ответы [ 6 ]

27 голосов
/ 14 декабря 2010

Просто переопределите метод onFling() виджета галереи и не вызывайте метод суперкласса onFling().

Это позволит продвигать галерею по одному элементу за одно нажатие.

20 голосов
/ 03 мая 2011

У меня было такое же требование, и я только что обнаружил, что оно будет сдвигать только один элемент за бросок, если я просто верну false.

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                       float velocityY) {        
    return false;
}
12 голосов
/ 03 июня 2011

пример кода для ответа на вопрос:

public class SlowGallery extends Gallery
{


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

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

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


    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    {

        //limit the max speed in either direction
        if (velocityX > 1200.0f)
        {
            velocityX = 1200.0f;
        }
        else if(velocityX < -1200.0f)
        {
            velocityX = -1200.0f;
        }

        return super.onFling(e1, e2, velocityX, velocityY);
    }

}
7 голосов
/ 17 марта 2011

У меня есть решение, которое, хотя оно и не гарантирует не более одного продвижения, чрезвычайно просто (и, вероятно, делает то, что вы сделали бы вручную в коде): просто уменьшите x-скорость в параметре onFling. То есть переопределите onFling, чтобы он выглядел просто так:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    return super.onFling(e1, e2, velocityX / 4, velocityY);
}

Best

Michael

3 голосов
/ 16 апреля 2012

Привет столкнулся с той же проблемой, я решил проблему, используя приведенную ниже логику.

1-> Создать один класс, который класс должен расширять Галерея
2-> и переопределить метод onFling.

см. Ниже код:

package com.sra;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.Gallery;

public class GallView  extends Gallery{
public GallView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub
    }

public GallView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }


    public GallView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }


    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                           float velocityY) {        
        return false;
    }

}

использовать этот класс в xml как галерею:


<com.sra.GallView
                android:id="@+id/Gallery01"
                android:layout_width="fill_parent"
                android:layout_height="250dip" >
            </com.sra.GallView>
0 голосов
/ 14 декабря 2010

Я не мог найти способ ограничить прокрутку, но я решил проблему, реализовав / адаптировав с некоторым успехом этот код: http://permalink.gmane.org/gmane.comp.handhelds.android.devel/101327

реализует галерею с "fling"

...