0

我有一个位图,下面是一个时间线。

作为一个例子,考虑图的右侧布局。

所有底部时间线(1、2、3...)与顶部的高度相同。

时间线是一个文本视图,它具有固定的布局高度和宽度,因为它在 xml 中定义,如时间线 1 定义为:

<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" />

然而,位图的高度和宽度可以改变,因为它是以编程方式完成的。

所以在某些情况下,位图高度增加到足以与时间线重叠。换言之,位图的垂直位置相对于时间线的垂直位置增加。

我想得到:

1) 位图相对于屏幕顶部的结束垂直位置。

2) 时间线相对于屏幕顶部的结束垂直位置。

我尝试执行以下操作:

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.

从代码中可以看出,这两个方法getHeight()getBottom()将高度返回为 0。

如何获得两者相对于单元格显示顶部的高度(查看结束位置)?

4

2 回答 2

0

希望这可以帮助

@覆盖

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(
        parentWidth / 2, parentHeight);

}

于 2013-08-30T14:17:32.850 回答
0

这是可以做到的:

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));
}
    }
}));
于 2013-08-30T14:22:13.920 回答