2010-09-01 123 views
3

我在RelativeLayout有一个画廊(图片),如果用户点击它,则出现三个ButtonsTextView。我使用可见属性进行设置,这意味着三个ButtonsTextView在xml文件中被声明为不可见,并且后来GalleryonClick()使其显示为setVisibility(0)。这可以正常工作,但我希望Gallery停止在Buttons期间滚动和TextView在前面。如何停止滚动画廊?

有没有办法做到这一点?

+2

我不认为'[停止]'是一个非常描述标签。 – Zaz 2010-09-01 15:08:43

+0

嗨乔希, 感谢您的回答。也许有onFling()方法?但是什么意思参数'MotionEvent'和'velocityX'? – androidfan76 2010-09-01 15:41:24

回答

5

如果你希望能够使画廊/禁用滚动,你可以使用类是这样的:

public class ExtendedGallery extends Gallery { 

    private boolean stuck = false; 

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

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

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

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    return stuck || super.onTouchEvent(event); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_DPAD_LEFT: 
    case KeyEvent.KEYCODE_DPAD_RIGHT: 
     return stuck || super.onKeyDown(keyCode, event); 
    } 
    return super.onKeyDown(keyCode, event); 
    } 

    public void setScrollingEnabled(boolean enabled) { 
    stuck = !enabled; 
    } 

} 

据图库源代码,有开始滚动了两个事件类型:屏幕触摸和按键在D-pad上按下。所以如果你想禁用滚动,你可以拦截这些事件。然后,使用这样的事情在你的布局:

<your.package.name.ExtendedGallery 
    android:id="@+id/gallery" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 

然后你就可以随时启用画廊/禁用滚动:

ExtendedGallery mGallery = (ExtendedGallery) findViewById(R.id.gallery); 
mGallery.setScrollingEnabled(false); // disable scrolling 
+0

优秀..谢谢! – 2012-03-20 13:26:59

+0

这也会禁用图库适配器内项目的itemClickListener。 – 2012-07-25 06:39:37