[android] ViewPager مع Google Maps API v2: عرض أسود غامض



3 Answers

كان نفس المشكلة مع SlidingMenu و ViewPager. لاحظت أن أزرار التحكم في جزء الخريطة ليست سوداء في الجزء الأيسر خلف الأداة. أنا حل المشكلة عن طريق تجاوز أسلوب MapFragment (SupportMapFragment)

@Override
public View onCreateView(LayoutInflater inflater, 
                         ViewGroup view, 
                         Bundle savedInstance) {

    View layout = super.onCreateView(inflater, view, savedInstance);
    FrameLayout frameLayout = new FrameLayout(getActivity());
    frameLayout.setBackgroundColor(
        getResources().getColor(android.R.color.transparent));
    ((ViewGroup) layout).addView(frameLayout,
        new ViewGroup.LayoutParams(
            LayoutParams.FILL_PARENT, 
            LayoutParams.FILL_PARENT
        )
    );
    return layout;
}
Question

لقد قمت بدمج جزء خرائط google maps api v2 الجديد في جهاز العرض. عند التمرير من جزء الخريطة ، يتراكب العرض الأسود مع الأجزاء المتجاورة. شخص ما قد حل؟

تحرير: قطة

public static class PagerAdapter extends FragmentPagerAdapter{

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    @Override
    public Fragment getItem(int position) {

        Fragment pageFragment;

        switch (position) {
        case 0:
            pageFragment = new TabAFragment();
            break;

        case 1:
            pageFragment = new TabBFragment();
            break;

        case 2:
            pageFragment = SupportMapFragment.newInstance();
            break;

        default:
            pageFragment = null;
            break;
        }

        return pageFragment;
    }
}



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




حل عملي: الاستفادة من واجهة لقطة جديدة من GoogleMap وعرض لقطة من الخريطة أثناء التمرير للصفحة.

إليك التعليمة البرمجية الخاصة بي لتعيين اللقطة (إنه في نفس قسم الخريطة ، يسمى FragmentMap.java):

public void setSnapshot(int visibility) {
    switch(visibility) {
    case View.GONE:
        if(mapFragment.getView().getVisibility() == View.VISIBLE) {
            getMap().snapshot(new SnapshotReadyCallback() {
                @Override
                public void onSnapshotReady(Bitmap arg0) {
                    iv.setImageBitmap(arg0);
                }
            });
            iv.setVisibility(View.VISIBLE);
            mapFragment.getView().setVisibility(View.GONE);
        }
        break;
    case View.VISIBLE:
        if(mapFragment.getView().getVisibility() == View.GONE) {
            mapFragment.getView().setVisibility(View.VISIBLE);
            iv.setVisibility(View.GONE);
        }
        break;
    }
}

حيث "mapFragment" هو SupportedMapFragment الخاص بي و "iv" هو ImageView (جعله match_parent).

وهنا أنا السيطرة على التمرير:

pager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if(position == 0 && positionOffsetPixels > 0 || position == 1 && positionOffsetPixels > 0) {
                ((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.GONE);
            } else if(position == 1 && positionOffsetPixels == 0) {
                ((FragmentMap)adapter.getRegisteredFragment(1)).setSnapshot(View.VISIBLE);
            }
        }
        @Override
        public void onPageScrollStateChanged(int arg0) {}
        @Override
        public void onPageSelected(int arg0) {}
    });

تقع شظائي مع الخريطة (FragmentMap) في الموضع 1 ، لذا أحتاج إلى التحكم في التمرير من الموضع 0 إلى 1 ومن الموضع 1 إلى 2 (أول جملة شرط). "getRegisteredFragment ()" هي دالة في Custom FragmentPagerAdapter الخاص بي ، والتي بها SparseArray (Fragment) تسمى "registeredFragments".

لذلك ، عند التمرير إلى أو من الخريطة ، تظهر لك دائمًا لقطة من الصورة. هذا يعمل بشكل جيد للغاية بالنسبة لي.




أنت لم تعط الكثير من التفاصيل حتى لا يكون هناك الكثير مما يمكنني اقتراحه. كان لدي مشكلة مشابهة أن الشاشة تومض بين وجهات النظر في جهاز النداء. اتضح أن mapView تضخيم عند المبادلة بين الصفحات في المرة الأولى.

لأكون واضحا كان لدي 3 صفحات في بيجر وكانت خريطتي هي الصفحة الأخيرة.

ولحل هذه المشكلة ، وجدت أن تعيين عدد صفحات الشاشة إلى 2 (وهذا ما كان يعمل في الحالة أعلاه) هو أنه عندما بدأت الجزء الخاص بي من تحميل جميع المشاهدات دفعة واحدة.

راجع http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit (int)




Related