Cómo saber si Ver dentro de Desplazamiento es visible completamente o no
Hay una vista de desplazamiento entre el encabezado (en la parte superior de la pantalla) y las pestañas (parte inferior de la pantalla). Quiero saber si el ImageView que está dentro del ScrollView está totalmente visible o no en la ventana de pantalla del teléfono.
- ¿Hay una manera de desplazarse mediante programación una vista de desplazamiento a un texto de edición específico?
- Adición de la vista de desplazamiento al diseño lineal dinámicamente
- Los botones dentro de ScrollView dentro de Galería no responden al clic
- Android paddingBottom no funciona sin paddingTop
- Android: cómo escuchar los eventos de desplazamiento?
- ScrollView Inside Horizontal Scrollview no funciona correctamente
- ScrollView: Pasa los eventos de toque a los niños
- Scrolling jerky antes de frenar cuando edittext solo dentro de scrollview
- ScrollView corta la parte superior y deja espacio en la parte inferior
- ¿Cómo usar ScrollView en Android?
- ScrollView vs RecyclerView para niños diferentes en Android
- Cómo hacer 'fastScrollEnabled' como ListView en ScrollView?
- Ver contenido a continuación ExpandableListView
Yo sugeriría hacer de la siguiente manera (el enfoque es similar a uno en esta pregunta ).
Por ejemplo, usted tiene el siguiente xml (no estoy seguro de lo que son el encabezado y las pestañas por lo que se echan de menos):
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/scroller"> <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" android:id="@+id/image" android:src="@drawable/image001" android:scaleType="fitXY" /> </ScrollView>
A continuación, la actividad puede ser similar a la siguiente:
public class MyActivity extends Activity { private static final String TAG = "MyActivity"; private ScrollView mScroll = null; private ImageView mImage = null; private ViewTreeObserver.OnGlobalLayoutListener mLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { final Rect imageRect = new Rect(0, 0, mImage.getWidth(), mImage.getHeight()); final Rect imageVisibleRect = new Rect(imageRect); mScroll.getChildVisibleRect(mImage, imageVisibleRect, null); if (imageVisibleRect.height() < imageRect.height() || imageVisibleRect.width() < imageRect.width()) { Log.w(TAG, "image is not fully visible"); } else { Log.w(TAG, "image is fully visible"); } mScroll.getViewTreeObserver().removeOnGlobalLayoutListener(mLayoutListener); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Show the layout with the test view setContentView(R.layout.main); mScroll = (ScrollView) findViewById(R.id.scroller); mImage = (ImageView) findViewById(R.id.image); mScroll.getViewTreeObserver().addOnGlobalLayoutListener(mLayoutListener); } }
En el caso de la imagen pequeña se registrará: la imagen es totalmente visible.
Sin embargo, debe tener en cuenta la siguiente incoherencia (según mi entendimiento): si tiene una imagen grande, pero realiza la escala (por ejemplo, establece android:layout_width="wrap_content"
) cuando se verá escalado, pero la altura real de ImageView
Será como altura completa de la imagen (y ScrollView
se desplazará incluso), por lo que adjustViewBounds podría ser necesario. La razón de ese comportamiento es que FrameLayout
no se preocupa por layout_width y layout_height de childs .
- La función de desplazamiento fijo de la imagen de fondo en dispositivos móviles de toque no se actualiza inmediatamente
- Dimensiones del teclado virtual QML