如何限制Android画廊中的投放到每个投放一个项目?

时间:2010-11-30 08:34:01

标签: android gallery

我有一个包含多个全屏图像的图库。我想将fling手势限制为一次只推进一个图像(如HTC Gallery应用程序)。什么是正确/最简单的方法来实现这一目标?

6 个答案:

答案 0 :(得分:27)

只需覆盖Gallery Widget的onFling()方法,不要调用超类onFling()方法。

这将使图库每次滑动前进一个项目。

答案 1 :(得分:20)

我有同样的要求,我发现如果我只是返回假,它每次只会滑动一个项目。

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

答案 2 :(得分:12)

回答问题的代码示例:

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

}

答案 3 :(得分:7)

我有一个解决方案,虽然它不能保证最多一次提前,但是非常简单(并且可能会在代码中手动执行):只需降低onFling参数中的x速度。也就是说,覆盖onFling只是看起来像这样:

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

最佳,

迈克尔

答案 4 :(得分:3)

您遇到同样的问题,我使用以下逻辑解决了问题。

1→创建一个类应该扩展Gallery的类 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>

答案 5 :(得分:0)

我找不到任何限制滚动的方法,但是我解决了实现/适应这个代码成功的问题: http://permalink.gmane.org/gmane.comp.handhelds.android.devel/101327

它实现了一个“fling”的画廊