drawRect单元问题android

时间:2011-08-03 05:33:03

标签: android 2d pixel units-of-measurement

我正在尝试跟踪Rect扩展TextView类的内容LinearLayout的边界View.getGlobalVisibleRect(Rect)我正在使用//Extended LinearLayout's onDraw protected void onDraw(Canvas canvas){ super.onDraw(canvas); TextView tv = (TextView)findViewById(R.id.textView1); Rect bounds = new Rect(); tv.getGlobalVisibleRect(bounds); canvas.drawRect(bounds, myPaint); } 以获取TextView的边界相对于其父级的框。它在某些设备上运行良好,但显然在其他手机上会出现某种单元问题。我所看到的简单例子:

bounds.top = TypedValue.complexToDimensionPixelSize(bounds.top, getContext().getResources().getDisplayMetrics());

预计它应该在TextView电视下画一个框。它在我的3.1平板电脑上,但在我的1.6和2.3手机上它绘制TextView下面的框。似乎我需要将边界框的值转换为不同类型的像素单元,以便获得我期望的结果。

问题是我不确定返回的Rect是否已经是DIP或标准像素。我试过这两个:

bounds.top = TypedValue.COMPLEX_UNIT_DIP, bounds.top, getContext().getResources().getDisplayMetrics());

{{1}}

但这些似乎都没有把盒子顶部转换到它应该的位置。我非常感谢任何反馈或建议。

谢谢!

1 个答案:

答案 0 :(得分:1)

事实证明getGlobalVisibleRect要么在3.0之前被破坏,要么不会返回我期望的结果。我发现我可以这样做。

TextView tv = (TextView)findViewById(R.id.textView1);
Rect bounds = new Rect(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom());