Android Функция getLocationonScreen () возвращает местоположение родительского представления вместо дочернего представления - PullRequest
0 голосов
/ 08 июля 2020

Я создал RelativeLayout в своей деятельности, и я динамически создаю объекты ImageView, которые добавляю в RelativeLayout, используя addView вместе с RelativeLayout.LayoutParams. Когда я затем go, чтобы получить позицию дочернего представления, он всегда возвращает координаты родительского представления. Вот соответствующие части кода:

public class MainActivity extends AppCompatActivity {
    public RelativeLayout parentLayout;
    RelativeLayout.LayoutParams layoutParams;
    

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

        parentLayout = findViewById(R.id.parentRelativeLayout);
    }

    // Method to dynamically add the ImageView to the parent
    public int addObject(Drawable drawing, int x, int y) {
        ImageView newObj = new ImageView(getApplicationContext());
        newObj.setBackground(drawing);
        layoutParams = new RelativeLayout.LayoutParams(50, 50);
        layoutParams.leftMargin = x;
        layoutParams.topMargin = y;
        int childIndex = parentLayout.getChildCount()-1;
        parentLayout.addView(newObj, childIndex,layoutParams);

        return childIndex;
    }

    public int[] getChildLocation(int childIndex) {
        View childView;
        int[] outlineCoord = new int[2];

        childView = parentLayout.getChildAt(childIndex);
        childView.getLocationOnScreen(outlineCoord);

        return outlineCoord;
    }

}

Если я затем добавлю дочерний элемент и попытаюсь получить координаты дочернего представления, я всегда получу местоположение родительского элемента:

childIndex = addObject(getResources().getDrawable(blackcircle), 100, 200);
outlineCoord = getChildLocation(childIndex);

Log.i("LOC:", "Location of child is X: " + outlineCoord[0] + " Y: " + outlineCoord[1]);

Я не могу понять, что я здесь делаю не так.

...