当片段加载时,如何使用坐标放置ImageView对象?

时间:2016-11-17 07:45:15

标签: android

我有点像编程的菜鸟。

我正在创建一个屏幕操纵杆和一个滑块,并使用ImageView对象来表示与另一个ImageView对象相关的位置值。

我需要知道在片段加载时将此ImageView对象放在另一个ImageView对象中间的最佳方法。我有一个函数centerSlider(),并希望在创建片段后运行它,但在onCreateView中使用它不起作用。

我可以在哪里调用我的功能?

     //Centers the position marker on the slider graphic
    public void centerSlider() {
      ImageView sliderPosition = (ImageView) rootview.findViewById(R.id.iv_slider_position);
      int posXY[] = new int[2];
      rootview.findViewById(R.id.iv_slider).getLocationOnScreen(posXY);
      int centerX = posXY[0] + ((rootview.findViewById(R.id.iv_slider)).getWidth() / 2);
      int centerY = posXY[1] - ((rootview.findViewById(R.id.iv_slider)).getHeight() / 2);
      sliderPosition.setX(centerX - (rootview.findViewById(R.id.iv_slider_position).getWidth() / 2));
      sliderPosition.setY(centerY - (rootview.findViewById(R.id.iv_slider_position).getHeight() / 2));
    }

1 个答案:

答案 0 :(得分:0)

如果你在onCreateView()中调用centerSlider()方法,你将无法通过view.getWidth()或view.getHeight()获得视图大小,因为测量尚未完成,它们的值是你可以试试这个:

rootView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
  int centerX = posXY[0] + ((rootview.findViewById(R.id.iv_slider)).getWidth() / 2);
  int centerY = posXY[1] - ((rootview.findViewById(R.id.iv_slider)).getHeight() / 2);
  sliderPosition.setX(centerX - (rootview.findViewById(R.id.iv_slider_position).getWidth() / 2));
  sliderPosition.setY(centerY - (rootview.findViewById(R.id.iv_slider_position).getHeight() / 2));
});

或者你可以新建一个Thread in,让它等待超过300ms,并调用你的方法,如下所示:

new Thread(() -> {
  try {
    Thread.sleep(300);
      getActivity().runOnUiThread(() -> {
      centerSlider();
    });
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}).start();