2012-08-24 16 views
21

मेरा ऐप का मुख्य इंटरफ़ेस एक व्यूपर है जहां उपयोगकर्ता विभिन्न पृष्ठों पर जाने के लिए क्षैतिज पृष्ठों को स्लाइड करता है। पृष्ठों में से एक में एक Google मानचित्रदृश्य है (नीचे चिपकाया गया है)। मेरी समस्या यह है कि यदि उपयोगकर्ता मानचित्र पृष्ठ पर है और क्षैतिज स्लाइड इशारा का उपयोग करता है, तो पृष्ठ नक्शे के किनारे चलने वाले मानचित्र के बजाय अगले पृष्ठ पर स्लाइड करता है। ऐसा लगता है कि दर्शक को मानचित्र से पहले इशारा हो रहा है।व्यूअर पेज में मैपव्यू के साथ इशारा मुद्दा

यदि उपयोगकर्ता चालाक है और नक्शा को एक विकर्ण या लंबवत दिशा में स्लाइड करना शुरू कर देता है तो नक्शा आगे बढ़ना शुरू कर देता है और फिर इशारा क्षैतिज रूप से जारी रह सकता है। लेकिन मैं पृष्ठ की बजाय एक साधारण क्षैतिज स्लाइड इशारा पर नक्शा स्थानांतरित करना पसंद करूंगा। पृष्ठ हमेशा टेक्स्टव्यू का उपयोग करके स्लीड हो सकता है।

क्या ऐसा कोई तरीका है जिससे मैं ऐसा कर सकता हूं?
धन्यवाद, गैरी

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/ContentPanel" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/tvMAP" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Map" 
    style="@style/bigtype" /> 


<com.google.android.maps.MapView 
    android:id="@+id/mapview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:apiKey="mykeygoeshere" 
    android:clickable="true" /> 

</LinearLayout> 

उत्तर

45

बेशक वहाँ है:

public class CustomViewPager extends ViewPager { 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
     if(v instanceof MapView){ 
      return true; 
     } 
     return super.canScroll(v, checkV, dx, x, y); 
    } 

} 

इस नक्शे नक्शे के अंदर सभी स्लाइड पर ध्यान न दें और सिर्फ नक्शा बाहर स्लाइड/draggs के बारे में परवाह कर देगा। आशा करता हूँ की ये काम करेगा। (मैं अभी क्षैतिज स्क्रॉल के साथ एक वेबव्यू के लिए यह करता हूं)

संपादित करें: यह उल्लेख करना भूल गया कि ViewPager के बजाय आपको अपने लेआउट में CustomViewPager का उपयोग करने की आवश्यकता है। ।।।

<com.yourpackage.CustomViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
     /> 
+0

मैं अपने मुख्य गतिविधि जावा फाइल में अपने वर्ग डाल दिया। मैंने com.deanblakely.CustomViewPager के लिए कॉल करने के लिए xml को बदल दिया। रनटाइम क्लास नॉटफाउंड एक्सेप्शन com.deanblakely.CustomeViewPager मिला। क्या मैं ऐसा कुछ भूल गया हूं? (एंड्रॉइड और जावा के लिए नया)। –

+0

वैसे यह एक अलग वर्ग में होने का अनुमान है। आपको एक नई फाइल बनाने और इस कोड को रखने की जरूरत है। इस मामले में यदि आप "com.deanblakely.CustomViewPager" रखना चाहते हैं तो "com" फ़ोल्डर के अंदर "deanblakely" फ़ोल्डर में फ़ाइल "CustomViewPager" बनाएं। –

+0

जॉर्ज। हां, यह एक बार काम करता है जब मैंने कक्षा को एक अलग फ़ाइल में रखा। धन्यवाद। –

11

गूगल मैप्स V2 का उपयोग कर रहे हैं, तो में

scrollingView.getClass() getPackage() getName() startsWith ("नक्शे।") का उपयोग canScroll विधि:

@Override 
protected boolean canScroll(View scrollingView, boolean checkV, int dx, int x, int y) { 
    if (scrollingView.getClass().getPackage().getName().startsWith("maps.")) { 
     return true; 
    } 
    return super.canScroll(scrollingView, checkV, dx, x, y); 
} 

becase scrollingViewmaps.jb जब नक्शे v2 का उपयोग कर रहा है।

मेरी कोड में

इसके अलावा, इन कक्षाओं में उपयोग किया जाता है:

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
+0

scrollingView.getClass() मेरे लिए हर बार शून्य है इसलिए यह त्रुटियां। – Justin

+1

शायद 'स्क्रॉलिंग व्यू' 'शून्य 'है या आप अज्ञात' स्क्रॉलिंग व्यू 'कक्षा का उपयोग करते हैं? – ViliusK

+0

'Object.getClass() 'पर दस्तावेज़ीकरण' getClass' रिटर्न 'शून्य' के मामलों के बारे में कुछ नहीं कहता है। – ViliusK