Intereting Posts
Android: Кто-нибудь знает, как захватить видео? Android Support Library: getDrawable независимо, если вектор или нет Автоматизировать импорт проектов Java (Android) в рабочее пространство Eclipse через командную строку Настройка прокси-сервера Firebase Android – Gridview с пользовательским BaseAdapter, создайте onclicklistener Android-эмулятор Webmoney Manymo, как он работает? Иконки дизайна материалов неожиданно перестали работать API данных Youtube: получить доступ к медиапотоку и воспроизведению (JAVA) Как удалить только содержимое файла в java? Не удалось получить доступ к приложению App Engine, запущенному в Android Studio, с помощью приложения Android Device в локальной сети Возможно ли создать такой вид пользовательского вида в Android? Каталог данных не имеет права на чтение и запись в Android Как имитировать нажатие кнопки с помощью кода? JNI- java.lang.UnsatisfiedLinkError: собственный метод не найден Посылать кодированные данные UTF-8 на сервер теряет определенные символы

Отключить прокруткуView Programmatically?

Я бы хотел включить ScrollView и отключить его нажатием кнопки.
Отключить означает, что если ScrollView не был там .. и включить его, возвращает ScrollView.
Я хочу, потому что у меня есть галерея с текстовыми изображениями, и на кнопке щелкните изменения ориентации экрана, поэтому в Пейзаже текст становится больше. И я хочу прокрутку, чтобы изображение не растягивало его, а текст стал нечитаемым.
scrollview.Enabled=false / setVisibility(false) ничего не делает .. xml:

 <ScrollView android:id="@+id/QuranGalleryScrollView" android:layout_height="fill_parent" android:layout_width="fill_parent"> <Gallery android:id="@+id/Gallery" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="horizontal"></Gallery> </ScrollView> 

благодаря

Edit1: я не могу использовать Visibility (нет), так как это также скроет Gallery, я хочу скрыть эффект от прокрутки. Когда есть ScrollView, изображения в Галерее становятся прокручиваемыми и не помещаются на экране, поэтому у вас есть Чтобы прокрутить, чтобы увидеть все изображение, я не хочу отключать / активировать это при нажатии кнопки. Я пробовал это:

 ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null); ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setHorizontalScrollBarEnabled(false); ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setVerticalScrollBarEnabled(false); ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setEnabled(false); 

Но все же изображения в Галерее прокручиваются и не подходят экрану. Какое решение для этого?

Solutions Collecting From Web of "Отключить прокруткуView Programmatically?"

Несколько пунктов для начала:

  1. Вы не можете отключить прокрутку ScrollView. Вам нужно будет расширить до ScrollView и переопределить метод onTouchEvent чтобы вернуть false когда какое-либо условие согласовано.
  2. Компонент Gallery прокручивается горизонтально независимо от того, находится ли он в ScrollView или нет – ScrollView обеспечивает только вертикальную прокрутку (вам требуется горизонтальная прокрутка для горизонтальной прокрутки)
  3. Вы, кажется, говорите, что у вас есть проблема с растяжением изображения – это не имеет ничего общего с ScrollView, вы можете изменить, как масштабируется ImageView с android:scaleType свойства android:scaleType (XML) или метода ScaleType.CENTER например ScaleType.CENTER Не будет растягивать изображение и сосредоточить его на оригинальном размере

Вы можете изменить ScrollView следующим образом, чтобы отключить прокрутку

 class LockableScrollView extends ScrollView { ... // true if we can scroll (not locked) // false if we cannot scroll (locked) private boolean mScrollable = true; public void setScrollingEnabled(boolean enabled) { mScrollable = enabled; } public boolean isScrollable() { return mScrollable; } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // if we can scroll pass the event to the superclass if (mScrollable) return super.onTouchEvent(ev); // only continue to handle the touch event if scrolling enabled return mScrollable; // mScrollable is always false at this point default: return super.onTouchEvent(ev); } } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { // Don't do anything with intercepted touch events if // we are not scrollable if (!mScrollable) return false; else return super.onInterceptTouchEvent(ev); } } 

Затем вы использовали бы

 <com.mypackagename.LockableScrollView android:id="@+id/QuranGalleryScrollView" android:layout_height="fill_parent" android:layout_width="fill_parent"> <Gallery android:id="@+id/Gallery" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="horizontal"> </Gallery> </com.mypackagename.LockableScrollView> 

В вашем XML-файле (просто изменили ScrollView на специальный LockableScrollView ).

Затем позвоните

 ((LockableScrollView)findViewById(R.id.QuranGalleryScrollView)).setScrollingEnabled(false); 

Для отключения прокрутки представления.

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

Я пошел так:

  scrollView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub return isBlockedScrollView; } }); 

Найденное простое решение

 ScrollView.requestDisallowInterceptTouchEvent(true); 

Чтобы начать, я использовал код, опубликованный в первом комментарии, но я изменил его следующим образом:

  public class LockableScrollView extends ScrollView { public LockableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public LockableScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public LockableScrollView(Context context) { super(context); } // true if we can scroll (not locked) // false if we cannot scroll (locked) private boolean mScrollable = true; public void setScrollingEnabled(boolean enabled) { mScrollable = enabled; } public boolean isScrollable() { return mScrollable; } @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // if we can scroll pass the event to the superclass if (mScrollable) return super.onTouchEvent(ev); // only continue to handle the touch event if scrolling enabled return mScrollable; // mScrollable is always false at this point default: return super.onTouchEvent(ev); } } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // if we can scroll pass the event to the superclass if (mScrollable) return super.onInterceptTouchEvent(ev); // only continue to handle the touch event if scrolling enabled return mScrollable; // mScrollable is always false at this point default: return super.onInterceptTouchEvent(ev); } } } 

Тогда я назвал это таким образом

 ((LockableScrollView)findViewById(R.id.scrollV)).setScrollingEnabled(false); 

Потому что я попробовал

 ((LockableScrollView)findViewById(R.id.scrollV)).setIsScrollable(false); 

Но он сказал, что setIsScrollable не определен

Я надеюсь, что это поможет вам

Disablend ScrollView

 ScrollView sw = (ScrollView) findViewById(R.id.scrollView1); sw.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); 

Вот более простое решение. Переопределите onTouch() для ScrollView OnTouchListener и верните false, если вы хотите обходить свиток прикосновением. Программная прокрутка по-прежнему работает, и нет необходимости расширять класс ScrollView .

 mScroller.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return isScrollable; } }); 

У меня недостаточно очков, чтобы прокомментировать ответ, но я хотел сказать, что ответ mikec работал на меня, за исключением того, что мне пришлось изменить его, чтобы вернуться! IsScrollable:

 mScroller.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return !isScrollable; } }); 
 @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // if we can scroll pass the event to the superclass if (mScrollable) return super.onInterceptTouchEvent(ev); // only continue to handle the touch event if scrolling enabled return mScrollable; // mScrollable is always false at this point default: return super.onInterceptTouchEvent(ev); } } 

@JosephEarl +1 У него отличное решение, которое отлично сработало для меня с некоторыми незначительными изменениями для его программного программирования.


Вот небольшие изменения, которые я сделал:

Класс LockableScrollView:

 public boolean setScrollingEnabled(boolean enabled) { mScrollable = enabled; return mScrollable; } 

Основная деятельность:

 LockableScrollView sv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sv = new LockableScrollView(this); sv.setScrollingEnabled(false); } 

Вы можете создать CustomScrollView, для которого вы можете отключить его взаимодействие с другими видами. Хотя это может иногда раздражать конечного пользователя. Используйте его с осторожностью.

Это код:

 import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewParent; public class CustomScrollView extends android.widget.ScrollView { public CustomScrollView(Context context) { super(context); } public CustomScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public CustomScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { /* Prevent parent controls from stealing our events once we've gotten a touch down */ if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { ViewParent p = getParent(); if (p != null) p.requestDisallowInterceptTouchEvent(true); } return false; } } 

Помогает ли это?

 ((ScrollView)findViewById(R.id.QuranGalleryScrollView)).setOnTouchListener(null); 

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

 public class MyGallery extends Gallery { public boolean canScroll; public MyGallery(Context context, AttributeSet attrs) { canScroll = true; super(context, attrs); } public void setCanScroll(boolean flag) { canScroll = flag; } @Override public boolean onScroll(android.view.MotionEvent e1, android.view.MotionEvent e2, float distanceX, float distanceY) { if (canScroll) return super.onScroll(e1,e2,distancex,distancey); else return false; } @Override public boolean onSingleTapUp(MotionEvent e) { if (canScroll) return super.onSingleTapUp(ey); else return false; } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (canScroll) return super.onFling(e1,e2,velocityX,velocityY); else return false; } } 

У меня был макет над NestedScrollView, который использовал сенсорное событие и отключил прокрутку:

 progressBarLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { return true; } }); 

И включить:

 progressBarLayout.setOnTouchListener(null); 

Как вы можете видеть в документации , вы не можете установить видимость на false. В вашем случае вы, вероятно, должны использовать:

 scrollview.setVisibility(Visibility.GONE); 

На прослушивателе кнопок нажмите

 ScrollView sView = (ScrollView)findViewById(R.id.ScrollView01); sView.setVerticalScrollBarEnabled(false); sView.setHorizontalScrollBarEnabled(false); 

Так что полоса прокрутки не включена при нажатии кнопки