Android - 如何在特定点画一个字母?

时间:2011-02-10 04:23:10

标签: android textview

我想用随机位置的100个不同字母填充屏幕。在iPhone上,我刚刚创建了一堆UILabels设置它们的x和y位置,然后使用动画来移动它们。

在Android上,看起来我不能在我的视图中添加TextView并指定其X和Y.有没有办法做到这一点?

    View gameView = findViewById(R.id.gameboard);
    tv = new TextView(gameView.getContext());
    tv.setText("A");
    tv.setWidth(w); tv.setHeight(h);
    // How to set the X and Y?

编辑:解决方案是使用AbsoluteLayout:

    AbsoluteLayout al = (AbsoluteLayout)findViewById(R.id.gb_layout);
    tv = new TextView(this);
    AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,10,10);        
    params.x = 50;
    params.y = 50;
    al.addView(tv, params);

并根据MotionEvent me移动它:

    AbsoluteLayout.LayoutParams p = new AbsoluteLayout.LayoutParams(
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,
            AbsoluteLayout.LayoutParams.WRAP_CONTENT,(int)me.getX(), (int)me.getY());
    mTV.setLayoutParams (p);

4 个答案:

答案 0 :(得分:0)

我认为你正在制作游戏,为此你应该研究一下SurfaceView here就是一个很好的例子

1 ...如果您查看代码,有onDraw方法,您将获得屏幕宽度和高度

2 ...现在将此宽度和高度作为随机生成器的种子获取x和y位置。

3 ...通过点2迭代100次,您将获得所需的结果

答案 1 :(得分:0)

您可以使用FrameLayout。将每个TextView的背景设置为透明,并将其添加到FrameLayout。使每个TextView和FrameLayout填充其父级。 FrameLayout将其所有子视图放在(0,0)处。要移动字母,只需更改相应TextView的顶部和左侧填充。

答案 2 :(得分:0)

在android定位中,子视图是布局类的责任。

您需要创建custom.layout并覆盖onLayout方法。在此方法中,您可以遍历调用每个子项上的View.layout(左,上,右,下)的所有子视图。

我在拖网时找到了这个示例代码: https://gist.github.com/882650

您还应该查看view.setTranslationX(和Y),这可能正是您所需要的

答案 3 :(得分:-1)

我不完全确定如何在代码中执行此操作,但您需要使用绝对布局作为根元素。 (编辑:不要使用绝对布局,因为有人指出它已被弃用。最接近的替代方案似乎是RelativeLayout。)

绝对布局坐标的XML格式的属性是layout_x和layout_y。

编辑:有一项研究表明你需要使用setLayoutParams,但我的Eclipse IDE无法正常工作,所以很遗憾我无法准确测试你正在寻找的东西。