在运行时移动视图时闪烁

时间:2013-07-08 09:29:21

标签: android rendering relativelayout

我在相对布局中有一个ImageView和3个TextViews,需要根据图像的大小在运行时定位文本视图。目前我在图像上使用ViewTreeObserver,以便我可以使用它的宽度/高度来定位文本框。

一切正常,只是TextViews在加载时跳转到正确的位置,使其看起来像闪烁。

有没有办法在屏幕渲染之前重新定位TextViews但是一旦ImageView设置了它的宽度和高度?

这是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);

1 个答案:

答案 0 :(得分:0)

我认为您希望TextView位于ImageView的中心。以下是您可以实现的方法,您可以为TextView添加保证金以立即调整其位置。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/relativeLayoutMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/myImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:adjustViewBounds="true"
    android:scaleType="fitStart"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true" 
    android:text="..." />

</RelativeLayout>