我有一个带有 ImageView 和 8 个 TextView 的 RelativeLayout。我想动态地在这个图像周围放置标签。我认为最好的方法是以 45 度的间隔旋转图像并在每个位置放置一个标签,但是 Image/RelativeLayout 直到下一个预先确定的 onDraw 调用和所有 TextViews 才会重绘(即使调用了 invalidate)之后将其放入消息队列中进行定位,因此所有 TextView 在 315 度标记处彼此重叠。
我尝试将 Runnable 发布到 RelativeLayout,希望在 onDraw 调用之后将其添加到消息队列中,但不幸的是它没有用,而且我的想法已经不多了。
我当前的代码如下所示,以了解我正在尝试做的事情:
public void setupMenuText() {
final float scale = getResources().getDisplayMetrics().density;
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos0), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos1), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos2), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos3), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos4), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos5), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos6), (72*scale)+0.5f);
setupMenuItemText((TextView)findViewById(R.id.menu_text_pos7), (72*scale)+0.5f);
}
public void setupMenuItemText(TextView pT, float pY) {
relativeLayout.setRotation(relativeLayout.getRotation()+45);
pT.setText("Some Text");
pT.setRotation(0);
pT.setGravity(Gravity.CENTER_HORIZONTAL);
pT.setX(0);
pT.setY(pY);
}
编辑:感谢 JSchools 的回答,这并不是我所需要的,而是为我指明了正确的方向,并且信息是准确的。
对于其他有同样问题的人,将 TextView 内的文本居中不会削减它。我必须手动将 TextView 的大小设置为远高于其预期用途,以便相对于图像准确定位。