0

我有一个显示圆圈的小程序,当您单击该圆圈时,它会重新出现在屏幕上的其他位置。

这在 90% 的情况下都有效,但有时这个圈子有问题。它可能出现在视图之外,显示为椭圆而不是圆形,或者放置在视图的中间。

谁能指出我正确的方向,我做错了什么?

屏幕:

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

代码示例:

public class Activity1 : Activity
{
    int margin = 20;

    Button ball;
    TextView debug;
    RelativeLayout mRel;
    RelativeLayout.LayoutParams ballParams;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Create a debug label
        debug = new TextView(this);

        // Create a new ball
        ball = new Button(this);
        ball.SetBackgroundDrawable(Resources.GetDrawable(Resource.Drawable.round_button));
        ball.Click += (o, e) => {
             RandomizePosition();
        };

        // Set ball parameters
        ballParams = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WrapContent,
        RelativeLayout.LayoutParams.WrapContent);

        // Create relative layout
        mRel = new RelativeLayout(this);
        mRel.SetBackgroundColor(Color.AntiqueWhite);
        mRel.AddView(ball);
        mRel.AddView(debug);
        SetContentView(mRel);

        // Randmize the ball position
        RandomizePosition ();
    }

    void RandomizePosition ()
    {
        // Get height and width
        Display display = WindowManager.DefaultDisplay;
        int width = display.Width;
        int height = display.Height;
        int relativeBallSize = ((((width * 2) + (height * 2)) / 100) * 3);

        // Set random parameters
        Random r = new Random();
        int maxWidth = (width - relativeBallSize);
        int maxHeight = (height - relativeBallSize);
        int x = r.Next(margin, (maxWidth < margin) ? margin : maxWidth);
        int y = r.Next(margin, (maxHeight < margin) ? margin : maxHeight);

        // Place the ball randomly
        ballParams.SetMargins(x, y, x, y);
        ball.LayoutParameters = ballParams;
        ball.SetHeight(relativeBallSize);
        ball.SetWidth(relativeBallSize);

        debug.SetText(string.Format("X = {0}, Y = {1}, Width = {2}, Height = {3}, Ball Width = {4}, Ball Height = {5}, Ball size = {6}", x, y, width, height, ball.Width, ball.Height, relativeBallSize), TextView.BufferType.Normal);
    }
}
4

1 回答 1

2

假设您的r.Next方法正常工作,我认为问题出在:

ballParams.SetMargins(x, y, x, y);

您正在分别设置左侧、顶部、右侧、底部的边距,我认为您并不是要设置右侧和底部边距。您可能想尝试改用 setX 和 setY 方法。

于 2013-06-03T20:41:43.600 回答