主Activity布局只有一个Viewpager
代码如下:
public class Btn03Activity extends BaseActivity implements ViewPager.OnPageChangeListener {
private ViewPager viewPager;
private MyAdapter myAdapter;
private List<GoodsEntity> data;
private List<Integer> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_btn03);
initData();
initView();
initEvent();
}
private void initEvent() {
myAdapter.setDatas(data);
viewPager.setAdapter(myAdapter);
viewPager.addOnPageChangeListener(this);
}
private void initView() {
viewPager = (ViewPager) findViewById(R.id.viewpager);
myAdapter = new MyAdapter();
}
private void initData() {
data = new ArrayList<>();
list = new ArrayList<>();
for (int i = 0; i < 5; i++) {
list.add(R.drawable.flower);
}
for (int i = 0; i < 5; i++) {
GoodsEntity entity = new GoodsEntity();
entity.setResId(R.drawable.flower);
entity.setData(list);
data.add(entity);
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
class MyAdapter extends StandardPagerAdapter {
@Override
public Object instantiateItem(ViewGroup container, int position) {
PageView pageView = new PageView(container.getContext());
GoodsEntity entity = (GoodsEntity) getItem(position);
pageView.setData(entity);
container.addView(pageView);
return pageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
PageView pageView = (PageView) object;
container.removeView(pageView);
}
}
}
可以看到viewpager的item是一个自定义view
代码如下:
public class PageView extends FrameLayout {
private GoodsEntity entity;
private VerticalViewPager verticalViewPager;
private ViewAdapter adapter;
public PageView(Context context) {
this(context, null);
}
public PageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public PageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
LayoutInflater.from(context).inflate(R.layout.view_pager, this, true);
verticalViewPager = (VerticalViewPager) findViewById(R.id.vertical_viewpager);
adapter = new ViewAdapter();
verticalViewPager.setAdapter(adapter);
}
public void setData(GoodsEntity entity) {
this.entity = entity;
adapter.setDatas(entity.getData());
}
class ViewAdapter extends StandardPagerAdapter {
@Override
public Object instantiateItem(ViewGroup container, int position) {
// View view = LayoutInflater.from(container.getContext()).inflate(R.layout.img_item, container, false);
// ImageView img = (ImageView) view.findViewById(R.id.img_item);
View view = LayoutInflater.from(container.getContext()).inflate(R.layout.touch_img, container, false);
TouchImageView img = (TouchImageView) view.findViewById(R.id.touch_img);
img.setMaxZoom(2.2f);
Integer resId = (Integer) getItem(position);
img.setImageResource(resId);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
View view = (View) object;
container.removeView(view);
}
}
}
代码很简单,可以看到有一个可以上下滑动的viewpager: VerticalViewPager
用法和普通的viewpager一样
item是一个imageview:TouchImageView 是可以双击放大和手势放大的imageview
其中的StandardPagerAdapter只是对普通的PagerAdapter做了简单的封装:
public class StandardPagerAdapter extends PagerAdapter {
private List<?> datas;
private View mCurrentView;
public StandardPagerAdapter() {
}
public StandardPagerAdapter(List<?> datas) {
this.datas = datas;
}
public StandardPagerAdapter setDatas(List<?> datas) {
this.datas = datas;
notifyDataSetChanged();
return this;
}
@Override
public int getCount() {
if (datas != null) return datas.size();
return 0;
}
public Object getItem(int i) {
if (datas != null && datas.size() > i && i >= 0) {
return datas.get(i);
}
return null;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
mCurrentView = (View) object;
}
public View getPrimaryItem() {
return mCurrentView;
}
}