我正在尝试实现一个水平旋转木马,屏幕上最多有3个项目,中间项目将有不同的视图。
我通过覆盖getPageWidth()回调使用ViewPager实现了它,但是很难找到中间项。
任何帮助或建议都会有所帮助。
private class ViewPagerAdapter extends FragmentStatePagerAdapter {
public int LOOPS_COUNT = 1000;
private String[] str = {
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"DD"
};
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
position = position % str.length;
return ViewPagerCustomFragment.instance(str[position]);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
@Override
public int getCount() {
return str.length * LOOPS_COUNT; // simulate infinite by big number of products
}
@Override
public float getPageWidth(int position) {
float f = 1.0f / 3;
return (f);
}
}
这是我的片段布局......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/abc"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_centerHorizontal="true"
android:layout_above="@+id/lin"
android:text="aaaaaaa"/>
<LinearLayout
android:id="@+id/lin"
android:layout_width="match_parent"
android:layout_centerInParent="true"
android:layout_height="wrap_content">
<View
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_gravity="center"
android:layout_weight="1"
android:background="#000000" />
<ImageView
android:id="@+id/imageview"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center"
android:src="@drawable/circle" />
<ImageView
android:id="@+id/imageview1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_gravity="center"
android:visibility="gone"
android:src="@drawable/circle"
android:tint="#000000"/>
<View
android:layout_width="0dp"
android:layout_height="2dp"
android:layout_gravity="center"
android:layout_weight="1"
android:background="#000000" />
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:0)
鉴于您一次刷过三个视图(因为您在屏幕上随时都有三个视图),为什么不尝试在屏幕上显示三个项目中的第二个项目?
假设您在屏幕上随时都有A
,B
和C
。现在,此时的第二个项目将是您的中间项目,即B
。
@Override
public Fragment getItem(int position) {
position = position % str.length;
if (position % 3 == 0) {
int mid = position + 1;
//do what you want to do with this. return a new fragment for the middle item (say ViewPagerCustomFragment2, for example).
return ViewPagerCustomFragment2.instance(str[mid]);
} else {
return ViewPagerCustomFragment.instance(str[position]);
}
}