2011-12-12 18 views
6

में लेआउट के एंड्रॉइड की विभिन्न चौड़ाई क्षैतिज दृश्य पेजर का उपयोग करके मैं कुछ स्क्रॉल व्यू बनाना चाहता हूं। बाएं दृश्य में पूर्ण स्क्रीन चौड़ाई होनी चाहिए, लेकिन केवल चौथाई चौड़ाई (यह डॉल्फिन ब्राउज़र की तरह एक लंबवत पैनल होगा)। ऐसा करना संभव है? मैंने सही लेआउट में android:layout_width बदल दिया, लेकिन यह काम नहीं किया।ViewPager

मेरे कोड:

public class TestActivity extends FragmentActivity { 

@Override 
public void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_view); 

    MyPagerAdapter adapter = new MyPagerAdapter(); 
    ViewPager pager = (ViewPager) findViewById(R.id.panelPager); 
    pager.setAdapter(adapter); 
    pager.setCurrentItem(0); 
    } 
} 

main_view.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/panelPager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 
</LinearLayout> 

MyPagerAdapter.java

public class MyPagerAdapter extends PagerAdapter { 

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

@Override 
public Object instantiateItem(final View collection, final int position) { 

    LayoutInflater inflater = 
      (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    int resId = 0; 
    switch (position) { 
    case 0: 
     resId = R.layout.left; 
     break; 
    case 1: 
     resId = R.layout.right; 
     break; 
    } 

    View view = inflater.inflate(resId, null); 
    ((ViewPager) collection).addView(view, 0); 

    return view; 
} 

@Override 
public void destroyItem(final View arg0, final int arg1, final Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 

} 

@Override 
public boolean isViewFromObject(final View arg0, final Object arg1) { 
    return arg0 == ((View) arg1); 

} 

left.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="LEFT" /> 

</LinearLayout> 

right.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="50dp" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="@color/light_blue" > 


<TextView 
    android:id="@+id/textView2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="RIGHT"/> 

</LinearLayout> 
+0

हाँ अपनी संभव हो, सब कुछ संभव है। क्या आप कुछ भी कर सकते हैं जो आपने किया है। – Warpzit

+0

क्या आपने इसे हल किया? –

उत्तर

1

ViewPager के लिए स्रोत को देखते हुए, यह कुछ ऐसा करने का बनाया गया है नहीं है, स्क्रॉल दूरी इत्यादि की गणना करने के लिए यह अपनी चौड़ाई का उपयोग करता है, स्पष्ट धारणा के साथ कि सभी बच्चों के पास ViewPager के समान चौड़ाई होगी।

आपके विशिष्ट मामले के लिए हो सकता है कि एक हैकी वर्कअराउंड हो। आप आसन्न पृष्ठों के बीच एक मार्जिन निर्दिष्ट कर सकते हैं, और यह मार्जिन नकारात्मक हो सकता है। यह परिणाम आपको दे सकता है, बशर्ते ViewPager के बच्चों के जेड-ऑर्डरिंग उचित हों। इसे आज़माएं, और देखें कि क्या आपको वह चाहिए जो आपको चाहिए।

2

एड्रियन बिल्कुल सही है। ViewPager को पूर्वावलोकन/टीज़र के रूप में अगली पोस्ट का एक हिस्सा दिखाने के लिए डिज़ाइन नहीं किया गया है, लेकिन कर सकता है। मेरी ViewPagerCursorAdapter extends PagerAdapter वर्ग में मैं रन:

public Object instantiateItem(View collection, final int position) { 
    cursor.moveToPosition(position); 
    View newView = getPageView(cursor, collection); 
    if (cursor.getCount() > 1) { 
     ((ViewPager)collection).setPageMargin(-overlapMargin); 
     if (! cursor.isLast()) { newView.setPadding(0, 0, overlapMargin, 0); } 
    } 
    ((ViewPager) collection).addView(newView); 
    return newView; //returns the object reference as the tag for identification. 
} 

आप होगा एक अजीब z अतिव्यापी मुद्दे में रन। चाल या तो केवल ViewPager की पृष्ठभूमि पर पृष्ठभूमि लागू करने के लिए या इसे पर के अंदर लागू करने के लिए नया दृश्य है जिसे आपने अभी पैडिंग सेट किया है। अच्छा लग रहा है और महान काम करता है।

+0

मैंने उपर्युक्त कोड का उपयोग किया है और मुझे बच्चे को व्यूअर में ओवरलैपिंग मिल रही है। क्या आप इस पर मेरी मदद कर सकते हैं? – Noundla

9

this question पर मर्फी का उत्तर देखें। उदाहरण के लिए आप अपने PagerAdapter वर्ग पर PagerAdapter के getPageWidth() विधि ओवरराइड करने के लिए, इस तरह की जरूरत है:

@Override 
public float getPageWidth(int page) { 
    if(page==0) { 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     return (float)LEFT_FRAGMENT_PIXEL_WIDTH/size.x; 
    } 
    else 
     return super.getPageWidth(page); 
}