有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android保存对象相对于屏幕维度的位置

我正在开发一个简单的应用程序,它将帮助用户在线玩足球游戏,并保存足球运动员在体育场内的位置。问题是,当我从屏幕保存对象的位置时,它们的位置会根据设备屏幕尺寸而改变

First image of players

Second image of players

这是我的主要职责。阶级

public class MainActivity extends AppCompatActivity {


private ViewGroup mainLayout;
private View footballer;

private int xDelta;
private int yDelta;

//339 133

private ArrayList<View> Footballer = new ArrayList<>();
private int[] IdOfPlayer = {
        R.id.footballer1,
        R.id.footballer2,
        R.id.footballer3,
        R.id.footballer4,
        R.id.footballer5,
        R.id.footballer6,
        R.id.footballer7,
        R.id.footballer8,
        R.id.footballer9,
        R.id.footballer10,
        R.id.footballer11,
};

private ArrayList<float[]> coordinatesOfPlayers = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


   // mainLayout = (RelativeLayout) findViewById(R.id.station);




    for (int id:IdOfPlayer) Footballer.add(findViewById(id));

    for (View v:Footballer) v.setOnTouchListener(new View.OnTouchListener() {
        PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down
        PointF StartPT = new PointF(); // Record Start Position of 'img'

        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouch(final View v, MotionEvent event) {
            int eid = event.getAction();
            switch (eid) {
                case MotionEvent.ACTION_MOVE:



                    PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y);

                    int NewXCoordinate =(int) (StartPT.x + mv.x);

                    int NewYCoordinate = (int)(StartPT.y + mv.y);

                    if (NewXCoordinate<0 ||  NewXCoordinate> dpToPx(300-25)|| NewYCoordinate<0 || NewYCoordinate > dpToPx(400-12)) break;

                    v.setX((int) (StartPT.x + mv.x));
                    v.setY((int) (StartPT.y + mv.y));
                    StartPT = new PointF(v.getX(), v.getY());

                    /*
                    if (v.getY() < -dpToPx(5) || v.getX() < -dpToPx(7) || v.getX() > dpToPx(300-25) || v.getY() > dpToPx(400-12)) {

                        v.setX(0);
                        v.setY(0);
                    }
                    */

                    break;
                case MotionEvent.ACTION_DOWN:

                    DownPT.x = event.getX();
                    DownPT.y = event.getY();
                    StartPT = new PointF(v.getX(), v.getY());

                    break;
                case MotionEvent.ACTION_UP:


                   // coordinatesOfPlayers.set(Footballer.indexOf(v),new float[]{v.getX(),v.getY()});


                    break;
                default:
                    break;
            }
            return true;
        }
    });

    for (int i  = 0;i<11;i++){
        setMargins(Footballer.get(i),i*50,i*70);
    }

}

public static void setMargins(View v, int l, int t) {

    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) v.getLayoutParams();
    lp.setMargins(l, t, 0, 0);
    v.setLayoutParams(lp);

}

public int dpToPx(int dp) {
    DisplayMetrics displayMetrics = getApplicationContext().getResources().getDisplayMetrics();
    return Math.round(dp * (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
}

这是我的XML文件

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓" xmlns:app="http://schemas.安卓.com/apk/res-auto" xmlns:tools="http://schemas.安卓.com/tools" 安卓:id="@+id/main" 安卓:layout_width="match_parent" 安卓:layout_height="match_parent" tools:context="com.tehedligmail.dragdrop.MainActivity"> <FrameLayout 安卓:layout_width="300dp" 安卓:layout_height="400dp" 安卓:background="@安卓:color/holo_green_light" 安卓:layout_gravity="center" 安卓:id="@+id/station"> <TextView 安卓:id="@+id/footballer1" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="1" /> <TextView 安卓:id="@+id/footballer2" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="2" /> <TextView 安卓:id="@+id/footballer3" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="3" /> <TextView 安卓:id="@+id/footballer4" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="4" /> <TextView 安卓:id="@+id/footballer5" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="5" /> <TextView 安卓:id="@+id/footballer6" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="6" /> <TextView 安卓:id="@+id/footballer7" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="7" /> <TextView 安卓:id="@+id/footballer8" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="8" /> <TextView 安卓:id="@+id/footballer9" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="9" /> <TextView 安卓:id="@+id/footballer10" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="10" /> <TextView 安卓:id="@+id/footballer11" 安卓:layout_width="30dp" 安卓:layout_height="20dp" 安卓:layout_gravity="top|start" 安卓:background="@安卓:color/holo_red_dark" 安卓:text="11" /> </FrameLayout> </FrameLayout>

欢迎所有建议,提前感谢


共 (0) 个答案