سؤال

لقد قمت بإنشاء فئة تراكب مخصصة حتى أتمكن من الحصول على نوع واحد من التراكب الذي ستضع علامة الرسم نفسها اعتمادًا على حالة بعض البيانات التي أعمرها.

لقد حاولت تحقيق ذلك من خلال محاولتي الأولى ، باستخدام setMarker الطريقة داخل فئة التراكب. بمجرد أن لم ينجح ذلك ، أحاول تجاوز getMarker الطريقة وجعلها تُرجع العلامة المناسبة لتمثيل البيانات.

انتهت كل من هاتين المحاولتين دون أن يتم رسم أي شيء على الخريطة ... ولكن إذا تم التعليق عليها ، فإن العلامات ترسم على ما يرام (باستثناء أنها تستخدم بالطبع العلامة الافتراضية ، وهذا ما أريده).

إليكم رمزتي لفصل OverlayItem المخصص (الأساليب التي جربتها ولم تعمل):

private class MyOverlayItem extends OverlayItem {
    private Context mContext;
    private MyData mData;

    public MyOverlayItem(GeoPoint point, MyData data, Context context) {
        super(point, data.getWhat(), data.getWhere());
        this.mContext = context;
        this.mData = data;

        /*if(data.getTemp() > 200)
            this.setMarker(res.getDrawable(R.drawable.icon_data_hot_l));
        else if(data.getTemp() > 100)
            this.setMarker(res.getDrawable(R.drawable.icon_data_neutral_l));
        else
            this.setMarker(res.getDrawable(R.drawable.icon_data_frozen_l));*/
    }

    /*@Override
    public Drawable getMarker(int stateBitset) {
        Resources res = this.mContext.getResources();
        if(this.mData.getTemp() > 200)
            return res.getDrawable(R.drawable.icon_data_hot_l);
        else if(this.mData.getTemp() > 100)
            return res.getDrawable(R.drawable.icon_data_neutral_l);
        return res.getDrawable(R.drawable.icon_data_frozen_l);
    }*/
}

هل هناك طريقة لفعل ما أحاول القيام به ... أم أنني بحاجة إلى جعل فئة تراكب فريدة تتوافق مع كل حالة من حالاتي؟ (EW.)

هل كانت مفيدة؟

المحلول

لقد تمكنت من ظهور العلامات ، ومع ذلك فإنها تظهر رأسًا على عقب (على الأقل ، أعتقد أنها ، قد يكون ظلها في أعلى اليسار بدلاً من اليمين السفلي).

كل ما احتاجه هو إضافة هذا الخط:

this.mMarker.setBounds(0, 0, this.mMarker.getIntrinsicWidth(), this.mMarker.getIntrinsicHeight());

... بالإضافة إلى هذا السطر لتوجيه العلامات بشكل صحيح (أضفت هذا عندما يضيف excedoverlay الخاص بي عنصر تراكب تان:

overlay.setMarker(boundCenterBottom(overlay.getMarker(0)));

نصائح أخرى

تنص واجهة برمجة التطبيقات على أن العلامة تحتاج إلى عرض ...

CERESTIALORB إما أن أحد قصاصاتك تقوم المهمة وحدها (أو عملت مع إما على أي حال) عند استخدام SetBounds () وحدها ، ستحصل على ما تقوله للقيام به ... تم تعيين المربع المحيط الخاص بك. يتم تعيين التوجه إلى نقطة التراكب وحالة الظل للعلامة ، وما إلى ذلك إلى الافتراضي (لم ينظروا إلى ذلك ، لكنهم لا يفعلون ما أريد ...) :)

moverlay.setmarker (BoundCenerBottom (moverlay.getmarker (0))) ؛ هل المهمة الكاملة لك ، وضع الحدود وتركيز أسفل العلامة على النقطة (وبالتالي اسم الطريقة الأنيقة).

الآن ، فيما يتعلق بأفضل الممارسات ، لمبة أكثر إشراقًا مما سأضطر إلى التناغم في ...

حاول تجاوز onDraw() طريقة فئة التراكب الخاصة بك.

هنا نهج آخر:

googlemaps: custom excedoverlay و overlayitem ، الطريقة الصحيحة لإظهار علامة مختلفة

أعتقد أنني أفضل هذا الإجابة ... شكرا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top