2011-12-12 7 views
6

水平ビューページャーを使用してスクロールビューを作成したいとします。左のビューは全画面幅でなければなりませんが、右に1/4の幅しかありません(これはDolphinブラウザのような垂直パネルになります)。それは可能ですか?私はandroid:layout_widthを正しいレイアウトに変更しましたが、動作しませんでした。Androidは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> 
ViewPagerのソースを見ると

は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

はいその可能性、すべてが可能です:あなたは、例えば、次のように、あなたのPagerAdapterクラスにPagerAdapterのgetPageWidth()メソッドをオーバーライドする必要があります。あなたがしたことのいくつかのコードを与えることができますか? – Warpzit

+0

あなたはそれを解決しましたか? –

答えて

1

、これは、行うように設計されていますものではありません。スクロール距離などを計算するために独自の幅を使用します。すべての子がViewPagerと同じ幅を持つという明確な前提があります。

具体的なケースについては、でも問題はありません。隣接するページ間にマージンを指定することができます。このマージンはとなります。は負の値になります。これは、ViewPagerの子のZオーダーが適切であれば、望む結果を得ることができます。試してみて、それがあなたが必要とするものをするかどうかを見てください。

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で確認してください。

@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); 
} 
関連する問題