Отключить действие ScrollView

В моем приложении у меня есть строка для увеличения ширины виджета (путем перетаскивания строки вправо/влево), и я включил ScrollView в одном и том же действии. Мне нужно отключить действие просмотра прокрутки, когда пользователь касается строки и когда пользователь выпускает ее, она должна быть включена. ScrollView должен находиться в видимом состоянии, но действие вида прокрутки должно быть отключено. Пожалуйста, помогите мне в решении этой проблемы. Я пробовал с ними, но никто из них не работает.

scroll.setEnabled(false); 
scroll.setFocusable(false); 
scroll.setHorizontalScrollBarEnabled(false); 
scroll.setVerticalScrollBarEnabled(false);

Спасибо заранее.

Ответ 1

Это может быть немного поздно, но я столкнулся с той же проблемой, поэтому мое решение похоже на выше, пришлось отключить OnTouchListener следующим образом:

// Get the ScrollView
final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview);


// Disable Scrolling by setting up an OnTouchListener to do nothing
myScroll.setOnTouchListener( new OnTouchListener(){ 
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true; 
    }
});


// Enable Scrolling by removing the OnTouchListner
tvDisplayScroll.setOnTouchListener(null);    

Ответ 2

Это немного поздно, но еще проще использовать только родительский ViewGroup и называть requestDisallowInterceptTouchEvent(true) на нем. Это вызывает не только непосредственный родительский (просмотр прокрутки), но и любые другие родительские объекты, которые могут перехватывать касание, чтобы игнорировать его в течение всего события. Это здорово, когда у вас есть перетаскиваемый дочерний элемент AND и перетаскиваемый родительский элемент, и вы хотите отключить перетаскивание родительского элемента во время перетаскивания ребенка.

Это также более общее решение, чем конкретное отключение просмотра прокрутки. Если вы повторно используете перетаскиваемый дочерний вид в другом месте, он все равно будет работать: вам не нужно знать идентификатор вида прокрутки. Код, который повторно используется без изменений, всегда хорош.

Ответ 3

Не уверен, что это то, о чем вы просите, но вам может потребоваться подкласс ScollView и сделать вашу собственную реализацию, которая может отключить прокрутку в определенное время.

Вот кто-то, кто сделал что-то подобное, но для сенсорных событий, чтобы отключить прокрутку через них.

http://osdir.com/ml/AndroidDevelopers/2009-08/msg01099.html

Ответ 4

Если кто-либо использует Android L или более поздние версии и переопределяет onTouch и onInterceptTouchEvent, не работает:
попробуйте переопределить onStartNestedScroll и return false.

Существует также новый атрибут XML nestedScrollingEnabled, но похоже, что он должен находиться в представлении, который пропускает событие прокрутки, а не на ScrollView, подверженном утечке, или где-либо в иерархии компоновки между их. Поэтому, если вы не знаете заранее, какие дочерние элементы ScrollViews у вас могут быть, переопределение onStartNestedScroll для затронутого ScrollView - это путь.