android - vista - porque no debemos ver muy cerca el monitor
Obtención de la posición final de la vista de texto y de la imagen con respecto a la parte superior de la pantalla (2)
Tengo un mapa de bits y debajo hay una línea de tiempo.
Como ejemplo, considere el diseño del lado derecho de la FIGURA .
Todas las líneas de tiempo inferiores (1, 2, 3 ...) están a la misma altura desde la parte superior.
La línea de tiempo es una vista de texto que tiene una altura y un ancho de diseño fijo, ya que se define en xml, como la línea de tiempo 1 se define como:
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/HView"
android:layout_marginLeft="18dp"
android:layout_marginTop="345dp"
android:textSize="14sp"
android:text="1"
android:textColor="#000000" />
Sin embargo, la altura y el ancho del mapa de bits pueden variar a medida que se hace programáticamente.
Entonces, en ciertos casos, la altura del mapa de bits aumenta lo suficiente como para superponerse a la línea de tiempo. En otras palabras, la posición vertical del mapa de bits aumenta con respecto a la posición vertical de la línea de tiempo.
Quiero tener:
1) la posición vertical final del mapa de bits con respecto a la parte superior de la pantalla.
2) la posición vertical final de la línea de tiempo con respecto a la parte superior de la pantalla.
Traté de hacer lo siguiente:
TextView bottomTimeLine = (TextView) view.findViewById(R.id.textView1);
bottomTimeLine.getHeight(); //returns 0.
bottomTimeLine.getBottom(); //returns 0.
ImageView img = new ImageView(getActivity());
img.setImageDrawable(getResources().getDrawable(R.drawable.disp_bg));
img.getHeight(); //returns 0.
img.getBottom(); //returns 0.
Como se ve en el código, ambos métodos, getHeight()
y getBottom()
devuelven height como 0.
¿Cómo obtener la altura (ver la posición final) de ambos con respecto a la parte superior de la pantalla de la celda?
Así es como se puede hacer:
final TextView bottomTimeLine = (TextView) view.findViewById(R.id.textView1);
final int[] timelineCoord = new int[2];
final int[] imgCoord = new int[2];
ViewTreeObserver vto = bottomTimeLine.getViewTreeObserver();
vto.addOnGlobalLayoutListener((new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
bottomTimeLine.getLocationOnScreen(timelineCoord);
Log.d(" bottomTimeLine H ", ""+timelineCoord[1]);
timelineHeight = timelineCoord[1];
}
}));
ViewTreeObserver vt1 = img.getViewTreeObserver();
vt1.addOnGlobalLayoutListener((new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
img.getLocationOnScreen(imgCoord);
imgHeight = imgCoord[1] + img.getHeight();
Log.d("Img H ", ""+imgHeight);
if(imgHeight < timelineHeight)
{
int heightDiff = imgHeight - timelineHeight ;
heightDiff = heightDiff + 3;
img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, heightDiff));
}
}
}));
Espero que esto ayude
@Anular
void protegido onMeasure (int anchoMeasureSpec, int heightMeasureSpec) {super.onMeasure (widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(
parentWidth / 2, parentHeight);
}