4

画面上のランダムな位置にa を表示しようとしてTextViewいますが、テキストが画面の外にはみ出してはいけません。テキストは常に短く、3 語以内にします。これは私がこれまでに持っているものです:

        final TextView tv = ((TextView)findViewById(R.id.text);

        final Random rand = new Random();
        final DisplayMetrics metrics = getResources().getDisplayMetrics();
        int width = rand.nextInt(metrics.widthPixels);
        int height = rand.nextInt(metrics.heightPixels);

        final FrameLayout.LayoutParams flp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        flp.setMargins(width, height, 0, 0);
        tv.setLayoutParams(flp);            

アップデート:

忘れていましたが、範囲内の乱数を取得するためにこの関数がありました:

public static int Random(final int lower, final int uppper)
{
    return lower + (int)(Math.random() * ((uppper - lower) + 1));
}

そこで、コードを次のように更新しました。

        int width = Random(0, metrics.widthPixels);
        int height = Random(0, metrics.heightPixels);

ただし、表示領域の外に表示されることがあります。各値から 10 を差し引いて、確実に表示されるようにしました。ほとんどの場合は表示されますが、画面の外のどこかに表示されているように見えます。

4

3 に答える 3

0

なぜこれができないのですか?

その代わりに、デバイスの最大 x と最大 y を見つけて、条件に基づいてビューの位置を特定の位置に設定できます。

これも参照してください:SO

あなたに役立つかもしれません。

質問があればコメントしてください。

于 2012-11-26T11:58:55.380 に答える
0

乱数を最大の幅と高さの範囲内に収めるために、もう少し調べてみてください。

于 2012-11-26T02:03:51.477 に答える
0

ただし、表示領域の外に表示されることがあります

  1. あなたの活動の上にタイトルはありませんか?それはカウントされます...よくわかりませんが、通知バーも同様だと思います...フルスクリーンモードで作業している場合、問題はないはずです。

  2. xy 座標は常に objectview の左上隅であることに注意してください。そのため、画像/テキストビュー/画面外のものの半分(または場合によっては完全)を取得する可能性があります...

于 2013-01-02T10:54:23.757 に答える