2011-02-10 3 views
1

ランダムな位置に100種類の文字で画面を塗りたい。 iPhone上で、私はちょうどUILabelsの束を作成してxとyの位置を設定し、アニメーションを使ってそれらを動かしました。Android - 特定のポイントで手紙を書く方法は?

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? 

EDIT:ソリューションはAbsoluteLayoutを使用することでした:MotionEvent私に

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); 

し、それを移動するためのベース:

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

必要まさにあなたが追加する必要があるとしていることかもしれませんいくつかのLayoutParams。この質問をチェックする:http://stackoverflow.com/questions/2305395/laying-out-views-in-relativelayout-programmatically –

+0

http://stackoverflow.com/questions/3268068/android-custom-layoutこの質問が見つかりました。これは最近、カスタムレイアウトを指し示すビデオリンクで回答されましたが、実際にチャイルドの位置を指定する方法の説明はありません(レイアウトパラメータ?) – Mark

答えて

0

私はあなたが行くだろうか全くわからないんだけどコードでこれを行うことについては、ルート要素として絶対レイアウトを使用する必要があります。

絶対レイアウト座標のXML形式のプロパティは、layout_xとlayout_yです。

編集:少しの研究では、setLayoutParamsを使用する必要があると言われていますが、Eclipse IDEが正しく動作しないため、探しているものを正確にテストできません。

+2

絶対レイアウトはAndroidで廃止されました。そこにある他のレイアウトから絶対レイアウトから可能なものはすべて可能です。 – achie

+0

ああ、そうですか?私は知らなかった。 –

+0

@archie - AbsoluteLayoutを使って他の在庫レイアウトではできないことができると確信しています。 (もちろん、それはレイアウトを維持するのが難しく、他のレイアウトではそうしないかもしれません)Hah!)OPが望むものを正確に行うために、AbsoluteLayoutは機能しますが、それ以外のものはありません。 (カスタムレイアウトは、もちろん、AbsoluteLayoutを再作成することはできません。) –

0

私はあなたがゲームを作っていると思うし、このためにあなたがSurfaceView hereになっているはずですが、その後良い例です

1 ...あなたはコードに見ればあなたが画面の幅を取得しますonDraw方法があります

2 ...ランダムジェネレータの種としてこの幅と高さを取ると、xとyの位置が得られます。

3 ...ポイントを介して2 100回を反復処理し、あなたは、このためでframeLayoutを使用することができ、望ましい結果

+0

私はTextViewの使用にこだわることができると思っています。それは実際にやるべき仕事の量を減らすからです。余分な行にXとYを設定すると、サーフェイスビューと描画方法を調べるよりもずっと簡単になります。 – Mark

+0

XMLで100個のテキストビューを定義し、アクティビティのハンドルを取得することでそれらを更新することができます:D - しかし、私は本当の答えとしてこれを置くことはできません。 –

+0

最初は、Surfaceviewを使用するのが難しいですが、TextViewsを使用するよりも効率的できれいで、100個のオブジェクトtextviewとそれらが取るメモリを作成することを検討しています。このアプローチでは時間が短縮されませんあなたのゲームでは、SurfaceViewを使ってゲームを増やしたり減速させたりするのは、50 FPS以上を達成することができますが、他のビューでは30-40 FPSにしかならない – ingsaurabh

0

を取得します。各TextViewの背景を透明に設定し、それをFrameLayoutに追加します。各TextViewとFrameLayoutを親に設定します。 FrameLayoutは、すべての子ビューを(0,0)に配置します。文字を移動するには、対応するTextViewの左上のパディングを変更します。

+0

うーん、興味深い考えですが、私は試してみるかもしれませんが、私はこれが、ワンタッチを無料で手に入れようとしていたTextViewを使用している点の1つを破棄したと思います。実際のテキストが表示されているのか、表示されているのかを判断できない限り。 – Mark

+0

それほど複雑ではありません。独自のコンテナ(LinearLayoutまたは同様のビュー)に各TextViewをラップし、TextViewの代わりにコンテナにパディングを設定します。 TextViewのサイズをwrap_contentに設定し、コンテナのサイズをfill_parentに設定します。 –

1

アンドロイドポジショニングの子ビューでは、レイアウトクラスが責任を負います。

custom.layoutを作成し、onLayoutメソッドをオーバーライドする必要があります。このメソッドでは、各子のView.layout(left、top、right、bottom)を呼び出すすべての子ビューを反復処理できます。

私はネットをトロールしながら、このサンプルコードを見つけました:またview.setTranslationX(およびY)をチェックアウトする必要があり https://gist.github.com/882650

あなたは

+0

私はそれをチェックしますありがとう – Mark

関連する問題