Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 加载片段时,如何使用坐标放置ImageView对象?_Android - Fatal编程技术网

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

Android 加载片段时,如何使用坐标放置ImageView对象?,android,Android,我对编程有点在行 我正在创建屏幕上的操纵杆和滑块,并使用ImageView对象表示相对于另一个ImageView对象的位置值 我需要知道在片段加载时将这个IVIEVIEW对象放在另一个IVIEVIEW对象中间的最佳方法。我有一个函数centerSlider(),希望在创建片段后运行它,但将其与onCreateView一起使用不起作用 我在哪里可以调用我的函数 //将位置标记置于滑块图形的中心 公共void centerSlider(){ ImageView滑块位置=(ImageView)roo

我对编程有点在行

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

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

我在哪里可以调用我的函数

//将位置标记置于滑块图形的中心
公共void centerSlider(){
ImageView滑块位置=(ImageView)rootview.findViewById(R.id.iv\u滑块位置);
int posXY[]=新的int[2];
rootview.findViewById(R.id.iv_滑块).getLocationOnScreen(posXY);
int centerX=posXY[0]+((rootview.findviewbyd(R.id.iv_滑块)).getWidth()/2);
int centerY=posXY[1]-((rootview.findViewById(R.id.iv_滑块)).getHeight()/2);
setX(centerX-(rootview.findViewById(R.id.iv_slider_position).getWidth()/2));
sliderPosition.setY(centerY-(rootview.findViewById(R.id.iv_slider_position.getHeight()/2));
}
如果在onCreateView()中调用centerSlider()方法,则无法通过View.getWidth()或View.getHeight()获取视图大小,因为测量尚未完成,它们的值为0。您可以尝试以下方法:

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));
});
或者,您可以添加一个新线程,让它等待300毫秒以上,然后调用您的方法,如下所示:

new Thread(() -> {
  try {
    Thread.sleep(300);
      getActivity().runOnUiThread(() -> {
      centerSlider();
    });
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
}).start();
如果在onCreateView()中调用centerSlider()方法,则无法通过View.getWidth()或View.getHeight()获取视图大小,因为测量尚未完成,其值为0。您可以尝试以下方法:

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));
});
或者,您可以添加一个新线程,让它等待300毫秒以上,然后调用您的方法,如下所示:

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

我认为最理想的情况是,我需要创建以对象为中心的东西,然后我的代码可以接管对象的移动。除非在xml文件中有一个布局选项可以这样做?我尝试使用网格布局来利用权重选项,但网格布局会缩放到屏幕边缘,而不是像imageview那样缩放到屏幕边缘。这很令人沮丧。如果有人有一个旧的较慢的设备,等待会导致问题。或者你可以考虑为这个问题编写一个自定义视图。我认为,我最需要的是创建以对象为中心的代码,然后我的代码可以随着对象的移动而接管。除非在xml文件中有一个布局选项可以这样做?我尝试使用网格布局来利用权重选项,但网格布局会缩放到屏幕边缘,而不是像imageview那样缩放到屏幕边缘。这很令人沮丧。如果某人有一个旧的较慢的设备,等待会导致问题,或者您可以考虑为这个问题编写一个自定义视图。