Mon but est de créer ceci.Android - Utilisation de pageradapter je veux faire la PREMIÈRE image montrer 1/4 de l'écran, puis laissez-le défiler naturellement
https://i.imgur.com/73fvHaF.gif
Le principal problème est que je ne peux pas obtenir l'image à la première position de rester à 1/4 (ou toute taille) quand je défiler cette image, il prendra toute la largeur de l'écran et Ensuite, agissez comme un pageradapter normal.
J'ai essayé ce qui suit
- Objectanimator.ofFloat
- Jouez avec margin, padding etc
- Trouver un moyen de fixer la limite pour la première image
- Set imageview vide pour pousser la vue sur le côté, cela semble plus viable bien que je dois appeler notifyDataSetChanged();
Lorsque je change des données dans l'adaptateur, j'appelle notifyDataSetChanged(); dont nous savons tous les mises à jour la vue sans transition en douceur.
Il me semble que cela devrait être une solution facile et propre, tant que je sais comment définir une limite pour la première image. Peut-être im mal
Voici le code que je utilise J'ai créé une galerie personnalisée widget de
public class ImageGalleryViewPager extends ViewPager {
public ImageGalleryViewPager(Context context) {
super(context);
setMyScroller();
}
public ImageGalleryViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
setMyScroller();
}
//down one is added for smooth scrolling
private void setMyScroller() {
try {
Class<?> viewpager = ViewPager.class;
Field scroller = viewpager.getDeclaredField("mScroller");
scroller.setAccessible(true);
scroller.set(this, new ImageGalleryViewPager.MyScroller(getContext()));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void setAdapter(PagerAdapter adapter) {
super.setAdapter(adapter);
setCurrentItem(adapter.getCount());
}
public class MyScroller extends Scroller {
public MyScroller(Context context) {
super(context, new DecelerateInterpolator());
}
@Override
public void startScroll(int startX, int startY, int dx, int dy, int duration) {
super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
}
J'utilise cela dans un Vignettes
<com.apirix.inspection.views.viewpagers.ImageGalleryViewPager
android:id="@+id/image_gallery_vp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v7.widget.CardView></RelativeLayout>
Voici mon Pageradapter
public AssignmentListGalleryAdapter(Context context, List<Media> medias, ViewPager horizontalView) {
mContext = context;
mMedias = medias;
mHorizontalView = horizontalView;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mItemView = inflater.inflate(R.layout.row_image_gallery_viewpager, container, false);
ButterKnife.bind(this, mItemView);
mUri = mMedias.get(position).getUrl();
closeAllImagesButton.add(mCloseButton);
mContainer = container;
container.setClipToPadding(false);
container.setPadding(30, 0, 60, 0);
if (!mUri.isEmpty()) {
Picasso.with(mContext)
.load(mUri)
.fit()
.into(mFullScreenImageView);
}
mCloseButton.setOnClickListener(this);
container.addView(mItemView);
return mItemView;
}
public int getItemPosition(Object object) {
return POSITION_NONE;
}
Génial! Maintenant, quand je balaye la première fois, je veux que l'image corresponde au pageradapter, jetez un coup d'œil au Gif fourni à nouveau https://i.imgur.com/73fvHaF.gif –
Mhh vous voulez dire que votre deuxième objet ne correspond pas à l'écran? –
Lors du balayage initial, le pageradapter doit étendre la première image aux conteneurs pleine largeur. Donc je balaye une fois à gauche, l'image se dilate, je balaye à gauche je reçois l'image numéro deux. Petit 1 -> Grand 1 -> Image 2 J'espère me rendre clair. –