2010-09-01 8 views
3

У меня есть галерея (изображения) в RelativeLayout, и если пользователи нажмут на нее, появятся три Buttons и TextView. Я сделал это с видимым свойством, это означает, что три Buttons и TextView объявлены невидимыми в xml-файле, а затем onClick()Gallery делает его видимым с setVisibility(0). Это работает отлично, но я хочу, чтобы Gallery остановился прокрутка во время Buttons и TextView впереди.Как остановить прокрутку галереи?

Есть ли способ сделать это?

+2

Я не думаю, что '[стоп]' очень описательный тег. – Zaz

+0

Hi Josh, спасибо за ваш ответ. Может быть, есть способ с onFling()? но что означают параметры «MotionEvent» и «velocityX»? – androidfan76

ответ

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

Отлично .. Спасибо! –

+0

Это также отключает элемент itemClickListener для элементов внутри адаптера Gallery. –