我有点像编程的菜鸟。
我正在创建一个屏幕操纵杆和一个滑块,并使用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));
}
答案 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();