¿Cómo habilitar Scale en Android ScrollView de una manera que no impide que se desplace y haga clic en sus elementos secundarios?
Tengo una vista personalizada que amplía Android ScrollView. El niño directo es un diseño relativo que tiene niños que se pueden hacer clic. Quiero ser capaz de:
- detecte el gesto de la escala en la vista de desplazamiento (que manejaré manualmente la escala de los artículos).
- desplácese el ScrollView verticalmente.
- mantener esos elementos secundarios que se pueden hacer clic.
Lo que he probado hasta ahora es (pseudo código):
- Android ScrollView se desplaza a la parte superior después de llamar a setVisibility (View.VISIBLE) en la vista secundaria
- ScrollView distrubing ListView dentro de LinearLayout
- Adición dinámica de vistas a RelativeLayout dentro de ScrollView
- ListView no desplazable dentro de ScrollView
- WebView en problemas con NestedScrollView
public class CustomView extends ScrollView { @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev) || mScaleDetector.onTouchEvent(ev); } @Override public boolean onTouchEvent(MotionEvent ev) { return mScaleDetector.onTouchEvent(ev); } private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Override public boolean onScale(ScaleGestureDetector detector) { // Handle the scale.. return true; } } }
También intenté diversas configuraciones para el onInterceptMethod tal como primera llamada el súper y la vuelta el mScaleDetector.onTouchEvent y así sucesivamente.
He logrado interceptar la escala o el clic y desplazarse, pero no ambos.
Gracias, Daniel
- ¿Es posible ajustar el adaptador al diseño lineal?
- Android: especifica la altura y el ancho de ScrollView
- Android :: VideoView dentro de un ScrollView
- ¿El oyente Scrollview no está trabajando en Xamarin para Android?
- Desplazamiento de EditText dentro de ScrollView
- Agregar una ScrollView simple a la Galería provoca una pérdida de memoria
- Lista expandible dentro de scrollview
- Lazy cargando ViewPagers en un ScrollView
La solución es utilizar:
@Override public boolean dispatchTouchEvent(MotionEvent ev){ super.dispatchTouchEvent(ev); return mScaleDetector.onTouchEvent(ev); }
y no anular los métodos onInterceptTouchEvent
y onTouchEvent
.
- ObjectAnimator usando setters de CharSequence
- evitando un bloqueo cuando alguien monta una tarjeta SD de Android