У меня есть ImageView и 3 TextView внутри встроенного макета, и вам нужно размещать текстовые представления во время выполнения в зависимости от размера изображения. На данный момент я использую ViewTreeObserver на изображении, чтобы я мог использовать его ширину/высоту для размещения текстовых полей.Мерцание при перемещении представлений во время выполнения
Все работает отлично, за исключением того, что TextViews перепрыгивают в нужное место при загрузке, что делает его похожим на мерцание.
Есть ли способ переместить TextViews перед отображением экрана, но как только изображение будет иметь ширину и высоту?
Вот (упрощенный) вариант кода XML:
<RelativeLayout
android:id="@+id/relativeLayoutMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myImage"
android:src="@drawable/myImageSrc"
android:adjustViewBounds="true"
android:scaleType="fitStart"
android:layout_alignParentStart="true"/>
<TextView
android:id="@+id/myTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="..."
android:layout_alignLeft="@+id/myImage"
android:layout_alignTop="@+id/myImage"/>
</RelativeLayout>
И вот код, я использую в функции обратного вызова addOnGlobalLayoutListener позиционировать вид текста во время выполнения:
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayoutMain);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
int width = relativeLayout.getMeasuredWidth();
int height = relativeLayout.getMeasuredHeight();
TextView tv = (TextView) findViewById(R.id.myTextView);
int w = tv.getMeasuredWidth();
int h = tv.getMeasuredHeight();
layoutParams.setMargins((int) (width * 0.5 - w/2), (int) (height * 0.54 - h/2), 0, 0);
tv.setLayoutParams(layoutParams);
Да, есть! в XML-макете. Вы можете сделать это легко в своем xml. Просто отправьте свой XML-код макета, чтобы я мог помочь. –
Я подозреваю, что вы просто хотите, чтобы ваш 'TextView' мог быть всегда ниже или выше 'ImageView'. Если это так, то это можно сделать в xml, но если есть что-то вроде размещения «TextView» для размещения A для размера x, но для размера y place B, которое совершенно иная, тогда это нужно делать во время выполнения. –
Это должно быть последнее. Позиция зависит от размера ImageView, который известен только во время выполнения. Я действительно думал о том, чтобы скрывать TextView, пока они не находятся в правильном положении - это, по крайней мере, означало бы, что они не прыгают по местоположению. – Chris