В чем заключается ошибка в поисках координат view?
Друже, выручайте, ей богу 3тий день колочусь , ничего не могу понять. В кратце. Нужно узнать x,y кнопок на Лаяуте, проблема в том, что выдает 0.0. Но, я бы мог подумать, что нерабочий метод и т.д, но самое интересное это то, что скопировав данный метод и применив на другую активность - все работает. Скоро сдавать работу, не имею малейшего понятия куда двигаться. Новичок в Android. Выручайте, братцы, кто чем может. Код активности, где не работает :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_graps_);
Intent intent = getIntent();
String textWindowS = intent.getStringExtra("editTextS");
visibleGraph(textWindowS);
drawGraph();
}
private void visibleGraph(String textWindows) {
......
}
}
}
private void drawGraph() {
Button btA = (Button) findViewById(R.id.bt_A);
Button btB = (Button) findViewById(R.id.bt_B);
Button btC = (Button) findViewById(R.id.bt_C);
Button btD = (Button) findViewById(R.id.bt_D);
Button btE = (Button) findViewById(R.id.bt_E);
Button btF = (Button) findViewById(R.id.bt_F);
Button btG = (Button) findViewById(R.id.bt_G);
Button btH = (Button) findViewById(R.id.bt_H);
Button btJ = (Button) findViewById(R.id.bt_J);
Button btK = (Button) findViewById(R.id.bt_K);
Button btL = (Button) findViewById(R.id.bt_L);
Button btM = (Button) findViewById(R.id.bt_M);
Button btN = (Button) findViewById(R.id.bt_N);
Button btO = (Button) findViewById(R.id.bt_O);
drawingImageView = this.findViewById(R.id.drawingImageView);
Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
.getDefaultDisplay().getWidth(), (int) getWindowManager()
.getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawingImageView.setImageBitmap(bitmap);
Paint paint = new Paint();
paint.setColor(Color.DKGRAY);
paint.setStrokeWidth(3);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
// canvas.drawLine(x1, y1, 100, 100, paint);
//
// вот тут отправляется view в метод, где должны определиться координаты, но возвращается всегда 0
Point point = getCenterPointOfView(btA);
System.out.println(point.x + " " + point.y);
}
private Point getCenterPointOfView(View view) {
int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0] + view.getWidth() / 2;
int y = location[1] + view.getHeight() / 2;
return new Point(x, y);
}
А вот точно такой же Активити, решил я попробывать туда вставить точно такую же операцию, результат - верный.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void continue_bt (View view){
EditText editText = (EditText) findViewById(R.id.mainWindowText);
String editTextS = editText.getText().toString();
// тут отправляю view в метод и результат - верный
Point point = getCenterPointOfView(editText);
System.out.println(point.x + " " + point.y);
Intent intent = new Intent(this,Graps_Activity.class);
intent.putExtra("editTextS",editTextS);
startActivity(intent);
}
private Point getCenterPointOfView(View view) {
int[] location = new int[2];
view.getLocationOnScreen(location);
int x = location[0] + view.getWidth() / 2;
int y = location[1] + view.getHeight() / 2;
return new Point(x, y);
}
}
Ответы (1 шт):
Если вам нужно получить координаты View элемента, то это рано делать в методе onCreate(). Для этого можно использовать ViewTreeObserver. Это такой колбэк который срабатывает когда view уже имеет конкретные координаты.
Например:
ViewTreeObserver vto = view.getViewTreeObserver(); // view для которого будут определены координаты
vto.addOnGlobalLayoutListener (new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int x = (int) view.getX();
int y = (int) view.getY();
Log.d("log", "X view: " + x);
Log.d("log", "Y view: " + y);
}
});
