2015-06-14 31 views
9

Tôi đang cố gắng để thực hiện ViewPager sử dụng MultiViewPager và sử dụng zoomoutpageTransformer google như hiệu lực, mục đích là đạt được một cái gì đó giống như hình ảnh này:MultiViewPager + ZoomOutPageTransformer không hoạt động đúng

enter image description here

nhưng tôi không thể hiển thị các hai trang ở bên phải và bên trái, mỗi khi tôi nhận được một trang ở giữa màn hình! đây là chế độ code pager của tôi:

 mViewPager.setPageMargin(
      -64); 
    mAdapter = new ViewPagerAdapter(getActivity(), mClasses); 
    mViewPager.setPageTransformer(true, new ZoomOutPageTransformer()); 
    mViewPager.setAdapter(mAdapter); 

đây là ViewPager tôi trong xml:

<ir.phzrobin.Utils.MultiViewPager 
    android:id="@+id/viewPager" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_margin="20dp" 
    app:matchChildWidth="@+id/textview_class_title" > 
</ir.phzrobin.Utils.MultiViewPager> 

và đây là cách bố trí trang ViewPager tôi:

<TextView 
     android:id="@+id/textview_class_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:layout_gravity="top" 
     android:layout_margin="5dp" 
     android:gravity="center_horizontal" 
     android:padding="10dp" 
     android:text="fsafjabf" 
     android:textAlignment="gravity" 
     android:textColor="@color/white" 
     android:textSize="17sp" /> 

    <TextView 
     android:id="@+id/textview_class_teacher" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textview_class_title" 
     android:layout_centerVertical="true" 
     android:layout_margin="5dp" 
     android:gravity="center_horizontal" 
     android:padding="10dp" 
     android:text="fsafjabf" 
     android:textAlignment="gravity" 
     android:textColor="@color/white" 
     android:textSize="17sp" /> 

    <ImageView 
     android:id="@+id/button_options" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_margin="20dp" 
     android:layout_marginRight="2dp" 
     android:background="@drawable/overflow" /> 
</RelativeLayout> 

những gì tôi đã cố gắng là this và cũng là câu trả lời của nhà phát triển multiviewpager từ here ai cũng có thể giúp tôi đạt được mục tiêu? nhờ

đây là quan điểm pager adapter:

public class ViewPagerAdapter extends PagerAdapter { 

// ImageLoader imageLoader = ImageLoader.getInstance(); 
// DisplayImageOptions options; 
// private ImageLoadingListener imageListener; 

Context activity; 
List<Classes> items; 

public ViewPagerAdapter(Context activity, List<Classes> items) { 

    this.activity = activity; 
    this.items = items; 
} 

public void setItems(List<Classes> items) { 
    this.items = items; 
    notifyDataSetChanged(); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return items.size(); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    // TODO Auto-generated method stub 
    return arg0 == arg1; 
} 

@Override 
public Object instantiateItem(ViewGroup container, int position) { 
    final int pos = position; 
    // TODO Auto-generated method stub 
    LayoutInflater inflater = (LayoutInflater) activity 
      .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
    View view = inflater.inflate(R.layout.row_viewpager, container, false); 

    TextView mClassTitle = (TextView) view 
      .findViewById(R.id.textview_class_title); 
    mClassTitle.setText("عنوان درس: " + items.get(pos).getSubject()); 
    mClassTitle.setTypeface(AppFont.GetAppFont()); 
    ((TextView) view.findViewById(R.id.textview_class_teacher)) 
      .setText("نام استاد: " + items.get(pos).getMasterName()); 
    ((TextView) view.findViewById(R.id.textview_class_teacher)) 
      .setTypeface(AppFont.GetAppFont()); 
    RelativeLayout mLayout = (RelativeLayout) view 
      .findViewById(R.id.rl_viewpager); 
    mLayout.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Intent _intent = new Intent(ContextVal.GetAppContext(), 
        ClassNotes.class); 
      _intent.putExtra("CLASSID", 
        String.valueOf(items.get(pos).getID())); // set selected 
                   // item id 
                   // into 
                   // intent 
                   // activity 
                   // to use in 
                   // Classnotes 
                   // Activity! 
      activity.startActivity(_intent); // open notes activity 

     } 
    }); 
    ImageView mOverFlow = (ImageView) view.findViewById(R.id.button_options); 
    mOverFlow.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      PopupMenu popup = new PopupMenu(ContextVal.GetAppContext(), v); 
      popup.getMenuInflater().inflate(R.menu.poupup_menu, popup.getMenu()); 
      popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { 
       public boolean onMenuItemClick(MenuItem item) { 
        if(item.getIcon() != null) 
        {//edit item 
         Intent _ClassWindow = new Intent(ContextVal.GetAppContext(), 
           AddNewClass.class); 
         _ClassWindow.putExtra("CLASSID", String.valueOf(items.get(pos).getID())); 
         activity.startActivity(_ClassWindow);      } 
        else{//delete item 
         AlertDialog.Builder builder = new AlertDialog.Builder(
           ContextVal.GetAppContext()); 

         builder.setTitle("حذف کلاس"); 
         builder.setMessage("آیا مطمعن هستید که میخواهید این درس را حذف کنید ؟"); 

         builder.setPositiveButton("بله", new DialogInterface.OnClickListener() { 

          public void onClick(DialogInterface dialog, int which) { 
           // Do nothing but close the dialog 
           Log.e("onClick", "YES"); 
           DatabaseHandler _db = new DatabaseHandler(ContextVal 
             .GetAppContext()); 
           _db.deleteClass(items.get(pos)); 
           _db.deleteClassNotes(items.get(pos).getID()); 
           ContextVal.mViewFragment.RefreshViewPager(); // Refresh Items ! 
                      // and remove 
                      // deleted item from 
                      // user's eyes lol 
           dialog.dismiss(); 
          } 
         }); 

         builder.setNegativeButton("خیر", new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface dialog, int which) { 
           // Do nothing 
           Log.e("onClick", "NO"); 
           dialog.dismiss(); 
          } 
         }); 
         AlertDialog alert = builder.create(); 
         alert.show();      } 

        return true; 
       } 
      }); 
      popup.show(); 
     } 
    }); 

    container.addView(view, 0); 
    return view; 
} 

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    // TODO Auto-generated method stub 
    container.removeView((View) object); 
} 

}

+1

Hãy gửi mã của bạn cho ViewPagerAdapter –

+0

@krislarson thêm vào câu hỏi –

Trả lời

1

Nhìn vào ví dụ này bố trí trang đoạn từ mẫu MultiViewPager trên GitHub:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="${relativePackage}.${activityClass}"> 

    <FrameLayout 
     android:id="@+id/vg_cover" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:layout_centerInParent="true" 
     tools:ignore="UselessParent"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginLeft="16dp" 
      android:layout_marginRight="16dp" 
      android:background="@drawable/bg_page" 
      android:scaleType="centerInside" 
      android:src="@drawable/im_pixplicity" 
      tools:ignore="ContentDescription" /> 

     <TextView 
      android:id="@+id/tv_item" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_margin="16dp" 
      android:gravity="center" /> 

    </FrameLayout> 

</RelativeLayout> 

Có một RelativeLayout với chiều rộng được đặt thành match_parent và một bên trong FrameLayout với chiều rộng rõ ràng là 200dp. Nội dung trong đó bên trong FrameLayout kết thúc là trang phân đoạn.

Bố cục của bạn có app:matchChildWidth="@+id/textview_class_title" nhưng không phải là ViewGroup như bên trong FrameLayout.

Bạn cần phải viết lại bố cục trang phân đoạn để bạn có một bên trong ViewGroup với tất cả các bên trong của bạn TextView.

Ngoài ra, không gọi rõ ràng setPageMargin(), MultiViewPager đặt lề trang nội bộ dựa trên tất cả các phép đo.

Nếu bạn vẫn gặp sự cố khi thao tác này hoạt động, tôi khuyên bạn nên bắt đầu với ứng dụng mẫu cho MultiViewPager và sửa đổi nó cho đến khi bạn nhận được kết quả bố cục bạn đang tìm kiếm.

+0

của nó có chiều rộng không làm việc, tôi chỉ cần thiết lập để 400dp, matchildwidth cũng loại bỏ, và đã thử tất cả các hình thức có thể, nhưng nó vẫn không hiển thị hai lớp trên trái và bên phải –

+0

Tôi chỉ nhận thấy chiều rộng của MultiViewPager là wrap_content, và tôi nghĩ rằng nó phải là match_parent. –

+0

không còn giống nhau nữa! u yêu cầu tôi tải lên mã, nhưng vấn đề là, không có lớp học bổ sung hoặc bố trí để đối phó với! tất cả đều ở đây –

1

Tôi có nhiều phân đoạn trong hoạt động của mình và tôi sử dụng FragmentStatePagerAdapter làm PageAdapter và MultiViewPager làm ViewPager.

Những mã dưới đây hoạt động tốt với của Google ZoomOutPageTransformer:

Hoạt động:

<com.tencent.qest.ui.components.MultiViewPager 
    android:id="@+id/pager" 
    android:layout_marginTop="20dp" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    app:matchChildWidth="@+id/card_container" 
    android:layout_below="@+id/pager_numbers"/> 

Fragment:

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content"> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/card_container" 
    android:layout_width="240dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_horizontal"> 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/img_banner_card" 
     android:layout_gravity="center_horizontal" 
     android:minHeight="64dp" 
     android:src="@drawable/place_holder_1" 

     android:layout_marginBottom="-4dp" 
     android:adjustViewBounds="false" 
     android:scaleType="center" 
     android:maxHeight="64dp" /> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     tools:context="com.tencent.qest.ui.fragments.SimpleInfoCardFragment" 
     android:padding="18dp" 
     android:background="@color/accent" 
     android:gravity="center_vertical" 
     android:layout_below="@+id/img_banner_card" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 

     <!-- TODO: Update blank fragment layout --> 


     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/txt_card_normal" 
      android:text="10.发放入职礼品" 
      android:id="@+id/tv_Title" 
      android:textSize="30dp" 
      android:paddingBottom="5dp" 
      android:layout_gravity="left" 
      android:paddingTop="5dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      style="@style/txt_card_normal" 
      android:text="地点:4楼休闲厅" 
      android:id="@+id/tv_SubTitle" 
      android:layout_gravity="center_horizontal|left" 
      android:textSize="20dp" 
      android:paddingBottom="5dp" 
      android:paddingTop="4dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Tips:必须完成前9项后才可以领取入职礼品哦!" 
      android:id="@+id/tv_Content" 
      android:layout_gravity="center_horizontal|left" 
      style="@style/txt_card_normal" /> 
    </LinearLayout> 
</RelativeLayout> 

0

Tôi chỉ làm cho nó tốt với điều này PageTransformer tùy chỉnh và MultiviewPager :

public class ScalePageTransformer implements ViewPager.PageTransformer{ 
    private static final float scaleMax = 0.8f; 
    @Override 
    public void transformPage(View view, float position) { 
     if (position<=0){ 
      float scale = scaleMax + (1+position)*0.2f; 
      ViewCompat.setScaleX(view, scale); 
      ViewCompat.setScaleY(view, scale); 
     } else { 
      float scale = scaleMax + (1-position)*0.2f; 
      ViewCompat.setScaleX(view, scale); 
      ViewCompat.setScaleY(view, scale); 
     } 
    } 
} 
Các vấn đề liên quan