我正在尝试跟踪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}}
但这些似乎都没有把盒子顶部转换到它应该的位置。我非常感谢任何反馈或建议。
谢谢!
答案 0 :(得分:1)
事实证明getGlobalVisibleRect
要么在3.0之前被破坏,要么不会返回我期望的结果。我发现我可以这样做。
TextView tv = (TextView)findViewById(R.id.textView1);
Rect bounds = new Rect(tv.getLeft(), tv.getTop(), tv.getRight(), tv.getBottom());