<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="280dp">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="240dp"
android:id="@+id/viewpage">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
android:gravity="center"
android:layout_gravity="bottom"
android:id="@+id/oval_layout"
>
</LinearLayout>
</LinearLayout>
![](https://img-blog.csdn.net/20161113102930628?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
下面为recycleAdapter的代码
public class RecycleViewAdapter extends RecyclerView.Adapter {
private List<Model> list;//model类中有两个属性以及其get和set方法
private int page;
private int row;
public RecycleViewAdapter(List<Model> list,int page,int row) {
this.list=list;
this.page=page;
this.row=row;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.data, parent, false);
MyHodler hodler = new MyHodler(view);
return hodler;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyHodler myHodler=(MyHodler)holder;
myHodler.imageView.setImageResource(list.get(position+(page-1)*10).getId());
myHodler.textView.setText(list.get(position+(page-1)*10).getName());
}
@Override
public int getItemCount() {
return list.size()>page*row*5?row*5:(list.size()-(page-1)*row*5);
}
class MyHodler extends RecyclerView.ViewHolder{
TextView textView;
ImageView imageView;
public MyHodler(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.name);
imageView = (ImageView) itemView.findViewById(R.id.image);
}
}
}
接下来是ViewPagerAdapter的代码
public class ViewPageAdapter extends PagerAdapter {
private List<View> list;//这个是保存了RecycleView
public ViewPageAdapter(List<View> list) {
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
/* for (View view : list) {
ViewGroup parent=(ViewGroup)view.getParent();
if (parent != null) {
parent.removeView(view);
}
}*/
//解决The specified child already has a parent. You must call removeView() on the child's parent first.
ViewGroup parent=(ViewGroup)list.get(position).getParent();
if (parent != null) {
parent.removeView(list.get(position));
}
container.addView(list.get(position));
return list.get(position);
}
}
最后是mainavtivity
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private int prePosition=0;
private LinearLayout linearLayout;
private ViewPager viewPager;
private int pagecount;
private ArrayList<Model> list=new ArrayList<>();
private ArrayList<View> listsView=new ArrayList<>();
private RecycleViewAdapter recycleViewAdapter;
private String[] titles = {"美食", "电影", "酒店住宿", "休闲娱乐", "外卖", "自助餐", "KTV", "机票/火车票", "周边游", "美甲美睫",
"火锅", "生日蛋糕", "甜品饮品", "水上乐园", "汽车服务", "美发", "丽人", "景点", "足疗按摩", "运动健身", "健身", "超市", "买菜",
"今日新单", "小吃快餐", "面膜", "洗浴/汗蒸", "母婴亲子", "生活服务", "婚纱摄影", "学习培训", "家装", "结婚", "全部分配"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_page);
viewPager = (ViewPager) findViewById(R.id.viewpage);
/*View view= LayoutInflater.from(this).inflate(R.layout.recycle_view, viewPager, false);
recyclerView = (RecyclerView) view.findViewById(R.id.recycle);
recyclerView.setLayoutManager(new GridLayoutManager(this,5));*/
linearLayout = (LinearLayout) findViewById(R.id.oval_layout);
initdata();
pagecount=(int)(titles.length/10)+1;
Log.d("test", pagecount+":pagecount");
//根据适配器的不同添加不同的recycleview
//*********并且为每个页面都inflate出实例
for (int i=1;i<=pagecount;i++){
View view= LayoutInflater.from(this).inflate(R.layout.recycle_view, viewPager, false);
recyclerView = (RecyclerView) view.findViewById(R.id.recycle);
recyclerView.setLayoutManager(new GridLayoutManager(this,5));
recycleViewAdapter = new RecycleViewAdapter(list, i, 2);
recyclerView.setAdapter(recycleViewAdapter);
listsView.add(recyclerView);
}
//如果同时添加两个名字为view1的则滑动的时候会报错
//The specified child already has a parent. You must call removeView() on the child's parent first.
/*View view = LayoutInflater.from(this).inflate(R.layout.oval_view, viewPager, false);
View view1 = LayoutInflater.from(this).inflate(R.layout.content_main, viewPager, false);
View view2 = LayoutInflater.from(this).inflate(R.layout.text, viewPager, false);
View view3 = LayoutInflater.from(this).inflate(R.layout.text, viewPager, false);
listsView.add(view3);
listsView.add(view);
listsView.add(view2);
listsView.add(view1);*/
viewPager.setAdapter(new ViewPageAdapter(listsView));
viewPager.setPageTransformer(true,new MyPageTransformor());
setOval();
mhandle.sendEmptyMessageDelayed(1, 1000);
}
public void initdata(){
//动态获取资源ID,第一个参数是资源名,第二个参数是资源类型例如drawable,string等,第三个参数包名
for (int i=0;i<titles.length;i++) {
list.add(new Model(titles[i], getResources().getIdentifier("ic_category_" + i, "mipmap", getPackageName())));
}
}
public void setOval(){//这个是设置滑动页面时下面的小圆会跟着滑动
//将oval_view添加到linearlayout中
for (int i=0;i<pagecount;i++) {
linearLayout.addView(LayoutInflater.from(this).inflate(R.layout.oval_view,null));
}
//好多个错误
//1当子view有parent的时候用addview将view添加到一个容器中会有错
//解决办法将整个子view所在的layout添加到另一个layout中
linearLayout.getChildAt(0).findViewById(R.id.oval_no_select).setBackgroundResource(R.drawable.oval_select);
//2当滑动页面的时候没有出现小圆点变现
//解决办法:找到小圆点layout。通过layout找到小圆点,直接改变小圆点的颜色
//之前是linearLayout.getChildAt(0).setBackgroundResource(R.drawable.oval_select);
//改变的只是layout的颜色
//3,页面滑动的时候颜色没有改变
//将要改变颜色的代码放入onPageSelected中
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.d("test", positionOffset + "positionOffset");
}
@Override
public void onPageSelected(int position) {
linearLayout.getChildAt(position).findViewById(R.id.oval_no_select).
setBackgroundResource(R.drawable.oval_select);
linearLayout.getChildAt(prePosition).findViewById(R.id.oval_no_select).
setBackgroundResource(R.drawable.oval_1);
prePosition=position;
}
@Override
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_DRAGGING:
flag=false;
break;
case ViewPager.SCROLL_STATE_IDLE:
flag=true;
break;
}
}
});
}
@Override
protected void onResume() {
super.onResume();
}
private Handler mhandle=new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
int current=(position)%pagecount;
viewPager.setCurrentItem(current,true);
position++;
break;
case 2:
position++;
break;
}
}
};
class MyThread extends Thread{
@Override
public void run() {
super.run();
while (true) {
Message message=new Message();
if (flag)
message.what=1;
else
message.what=2;
mhandle.sendMessage(message);
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
}
boolean flag=true;
private int position=0;
}