بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

پیدا کردن مختصات x و y یک view

مدیریت گفتگو
120578 9 سال پیش
آخرین تغییر: 9 سال پیش

سلام دوستان چطور میشه مختصات x و y یک view رو پیدا کنم . من از متدهایgetX وgetY استفاده کردم اما مقدار صفر رو بر میگردونه

کد من اینه

ch1=(CheckBox) findViewById(R.id.ch1);
ch2=(CheckBox) findViewById(R.id.ch2);
float startx =  ch1.getX();
float starty = ch1.getY();
float endx = ch2.getX();
float endy = ch2.getY();

Log.i("Log","x1="+startx+" y1="+starty+" x2="+endx+" y2="+endy);

نظرات

پاسخ‌ها 2

Reza 9 سال پیش

سلام

 int[] location_Of_View = new int[2];
view.getLocationOnScreen(location_Of_View);

left_View= location_Of_View[0];
 top_View= location_Of_View[1];
 right_View= left_View+ view.getWidth();
 bottom_View= top_View+ view.getHeight();

نظرات

120578 9 سال پیش
سلام داداش متاسفانه این کد هم مقدار صفر رو بر میگردونه
Reza 9 سال پیش
من دارم از همین استفاده میکنم و درسته . حتما view شما سمت چپ و بالای صفحه قرار داره که 0 برمیگرده .
120578 9 سال پیش
نه بالا نیست . کده درسته اما یه چیزی که جالب هست اینه که زمانی که برای رخداد کلیک یک آیتم این کد رو مینویسم مختصات رو میده مشکلی هم نیست . اما داخلoncreate که این کد رو مینویسم مختصات هر view رو که میدم صفر بر میگردونه. نمیدونم مشکلش چیه
Reza 9 سال پیش
کدهای onCreate قبل از محاسبات اندازه و موقعیت layout هست . برای همین در onCreate هنوز اندازه ها و موقعیت ها صفره . متد onAttachedToWindow رو در اکتیویتی overrid کن و این کدها رو توی اون بذار وکاری که میخوای همونجا انجام بده ببین درست میشه .
kazemian 9 سال پیش

احتمالا زمانی که مختصات ویوی مورد نظرتون رو میگیرید هنوز رندر نشده برای همین مقدار صفر رو برمیگردونه

شما میتونید از متد زیر استفاده کنید

 
public void onLoadActivity(final View v) {
        ViewTreeObserver vto = v.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            public boolean onPreDraw() {
                v.getViewTreeObserver().removeOnPreDrawListener(this);

//v.getLeft ...

                return true;
            }
        });
    }

و در onCreate به این صورت صداش بزنید :

 
onLoadActivity(yourView);


این متد چک میکنه هروقت ویوی مورد نظر  کاملا لود شد عملیات شما رو انجام میده

نظرات

120578 9 سال پیش
سلام ممنون عزیز با این متد درست شد. خیلی لطف کردین
kazemian 9 سال پیش
خواهش میکنم عزیز،خوشحال میشم کمکی کرده باشم

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .