Zoomlayout: احصل على إحداثيات قابلة للرسم

تم إنشاؤها على ١٥ فبراير ٢٠١٩  ·  10تعليقات  ·  مصدر: natario1/ZoomLayout

أهلا،

شكرا جزيلا لك على العمل الجاد في هذه المكتبة الرائعة. أنا راضٍ تمامًا عن النتيجة وواجهة برمجة التطبيقات ، ومع ذلك ، أود الحصول على إحداثيات X و Y للرسوم القابلة للرسم داخل ZoomImageView لأنني أرسم بعض الدوائر أعلى ZoomImageView وأود منهم أن يتحركوا جنبًا إلى جنب مع drawable (بعد التكبير كذلك). فكر في المشكلة لأن لديك خريطة (ZoomImageView) وفوقها لديك بعض الدبابيس التي يجب أن تحافظ على نفس الموضع النسبي عندما يقوم المستخدم بالتكبير / التصغير أو تحريك العرض. أي مساعدة ستكون محل تقدير كبير.

شكرا لك.

question stale

التعليق الأكثر فائدة

ماركوس محق ، ولكن بدلاً من zoom يجب عليك استخدام realZoom لتكون آمنًا.

لذلك إما أنك تحتاج إلى panX أو panX * realZoom (أو ناقص هذا ، اعتمادًا على حساباتك). يعتمد ذلك على كيفية رسمها.

اعتمادًا أيضًا على كيفية الرسم ، قد تضطر إلى مراعاة أشياء أخرى ، مثل حجم الشاشة / حجم الحاوية. في النهاية ، إنها مشكلة حسابية بحتة ، فقط تأكد من فهم ما هي panX و panY .

يمكنك أيضًا استخدام engine.addListener() لتلقي ردود النداء.

ال 10 كومينتر

يمكنك الحصول على الإحداثيات باستخدام getPanX و getPanY .

يمكنك الحصول على الإحداثيات باستخدام getPanX و getPanY .

قد ينجح هذا ولكن الحصول على المقلاة لا يأخذ في الاعتبار عامل مقياس التكبير / التصغير. أعتقد أن نظام الإحداثيات يتم تضخيمه عند التكبير. هل هناك أي طريقة أخرى للقيام بذلك فيما يتعلق بعامل التكبير والتصغير؟

أعتقد أنه يمكنك فقط ضربها مع خاصية zoom .

أعتقد أنه يمكنك فقط ضربها مع خاصية zoom .

غير دقيق لأن الحصول على التكبير / التصغير والقيام بالضرب لن يأخذ في الاعتبار محور مركز التكبير / التصغير (حيث يحدث القرص) ، لذا فإن هذا من شأنه أن يترجم جميع الإحداثيات استنادًا إلى الموضع الافتراضي للمحور. حاولت إعادة ضبط المحور X و Y على وضع القرص ولكن لم يحالفني الحظ.

لماذا تعتبر النقطة المحورية للقرصة مهمة عندما تكون العروض الموجودة أعلى تخطيط التكبير / التصغير لها موضع ثابت بالنسبة لها؟ ألا ينبغي أن يكون ذلك كافيًا لتحريك العروض في الأعلى تمامًا مثل لوحة تخطيط التكبير ولكن في الاتجاه المعاكس؟ عندما يتم تكبير تخطيط التكبير / التصغير (على سبيل المثال ، تكبير> 1) ، يجب أن تكون ترجمة العروض في الأعلى أقل من حجم البكسل الأصلي لأنه كما قلت ، سيتم تضخيم إحداثيات تخطيط التكبير (خارج الجزء العلوي من رأسي) قد تعتقد أنك تحتاج فقط إلى تقسيم المقلاة على عامل التكبير / التصغير).

لماذا تعتبر النقطة المحورية للقرصة مهمة عندما تكون العروض الموجودة أعلى تخطيط التكبير / التصغير لها موضع ثابت بالنسبة لها؟ ألا ينبغي أن يكون ذلك كافيًا لتحريك العروض في الأعلى تمامًا مثل لوحة تخطيط التكبير ولكن في الاتجاه المعاكس؟ عندما يتم تكبير تخطيط التكبير / التصغير (على سبيل المثال ، تكبير> 1) ، يجب أن تكون ترجمة العروض في الأعلى أقل من حجم البكسل الأصلي لأنه كما قلت ، سيتم تضخيم إحداثيات تخطيط التكبير (خارج الجزء العلوي من رأسي) قد تعتقد أنك تحتاج فقط إلى تقسيم المقلاة على عامل التكبير / التصغير).

عند استخدام المقلاة والتكبير / التصغير ، يتم تبديل دبابيس التخطيط المتراكب (أعلى مخطط التكبير / التصغير) على القطر على شكل تبديل خطي. ما أريد أن أقوله هنا هو أنه في بعض الأحيان تقوم بقرص الموضع الذي يوجد فيه الدبوس ، لذلك لا ينبغي أن يتم تبديل هذا الأخير على الإطلاق ولكن في حالتي ، سواء كان الضرب أو القسمة ينتقل فقط على القطر. بالإضافة إلى كل ما أعتقد أن هذه المكتبة تحتاج إلى إضافة بعض عمليات الاسترجاعات مثل "onZoomUpdate -> zoom: Float" و "onViewPanUpdate -> float [x، y]"

ماركوس محق ، ولكن بدلاً من zoom يجب عليك استخدام realZoom لتكون آمنًا.

لذلك إما أنك تحتاج إلى panX أو panX * realZoom (أو ناقص هذا ، اعتمادًا على حساباتك). يعتمد ذلك على كيفية رسمها.

اعتمادًا أيضًا على كيفية الرسم ، قد تضطر إلى مراعاة أشياء أخرى ، مثل حجم الشاشة / حجم الحاوية. في النهاية ، إنها مشكلة حسابية بحتة ، فقط تأكد من فهم ما هي panX و panY .

يمكنك أيضًا استخدام engine.addListener() لتلقي ردود النداء.

ماركوس محق ، ولكن بدلاً من zoom يجب عليك استخدام realZoom لتكون آمنًا.

لذلك إما أنك تحتاج إلى panX أو panX * realZoom (أو ناقص هذا ، اعتمادًا على حساباتك). يعتمد ذلك على كيفية رسمها.

اعتمادًا أيضًا على كيفية الرسم ، قد تضطر إلى مراعاة أشياء أخرى ، مثل حجم الشاشة / حجم الحاوية. في النهاية ، إنها مشكلة حسابية بحتة ، فقط تأكد من فهم ما هي panX و panY .

يمكنك أيضًا استخدام engine.addListener() لتلقي ردود النداء.

يبدو جيدًا سأجربه. شكرا جزيلا

andromedcodes هل تمكنت من الحصول على الإحداثيات القابلة للرسم الصحيحة داخل ZoomImageView؟

هذا ما جربته:

ZoomImageView imgScreen;
Matrix m = new Matrix(imgScreen.getImageMatrix());
        Drawable d = imgScreen.getDrawable();
        RectF drawableRect = new RectF(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
        RectF viewRect = new RectF(0, 0, imgScreen.getWidth(), imgScreen.getHeight());
        m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
        m.invert(m);

        // Convert the points inside the image
        float[] points = new float[2];
        points[0] = event.getX(); //holds x coordinate of drawable
        points[1] = event.getY(); //holds y coordinate of drawable
        m.mapPoints(points);

لكني لا أفهم كيفية ضبط قيم التحريك والتكبير هناك. سيكون موضع تقدير أي مساعدة. شكرا

تم وضع علامة على هذه المشكلة تلقائيًا على أنها قديمة نظرًا لعدم وجود نشاط لها في آخر 20 يومًا. سيتم إغلاقه إذا لم يحدث أي نشاط آخر خلال الأيام السبعة المقبلة. شكرا لمساهماتكم.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات