0

我有一个带有 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 的大小设置为远高于其预期用途,以便相对于图像准确定位。

4

1 回答 1

0

您需要设置每个单独的 TextView 的旋转。您似乎多次旋转容器,但由于所有 TextViews 都在容器内,并且它们相对于容器的旋转都为零,因此它们似乎是堆叠的。根本不要旋转容器。您还需要设置 TextView 的位置,以便将它们排列成一个圆圈。简单地旋转它们会将它们粘在一起。

于 2013-04-17T20:50:20.967 回答