请教一下下面的UI怎么实现:主界面是一个RecyclerView,item里面有个ViewPager,默认item中ViewPager是收缩状态且不可滑动,点击后展开显示完整的ViewPager并且可以滑动,如图

解决方案 »

  1.   

    ViewPager是收缩状态就GONE隐藏掉,点击就显示不行么,可能设置为显示后还要刷新下
      

  2.   

    你是说收缩状态那部分内容和ViewPager分离吗,但是这样写也不太好写,因为这样ViewPager第一页和后面两页高度就不一样了,而且后面两页还要隐藏原本收缩时显示的内容
      

  3.   

    你这个需求描述就不清楚,你右边viewpage切换左边图片也不切换那么你左右确定是同一个recycleview?你确定好需求在设计方案
      

  4.   

    上面四张图对应ViewPager的四种状态,你看不懂我也没办法
      

  5.   

    你是说收缩状态那部分内容和ViewPager分离吗,但是这样写也不太好写,因为这样ViewPager第一页和后面两页高度就不一样了,而且后面两页还要隐藏原本收缩时显示的内容看不懂你的ViewPager是哪个...
      

  6.   

    你是说收缩状态那部分内容和ViewPager分离吗,但是这样写也不太好写,因为这样ViewPager第一页和后面两页高度就不一样了,而且后面两页还要隐藏原本收缩时显示的内容看不懂你的ViewPager是哪个...
    每个item右边那部分就是一个ViewPager,ViewPager里第一页是当前天气预览,第二页是当天不同时段天气预报,第三天是未来七天天气预报
      

  7.   

    我应该看懂,你的意思是点击某个ItemView,这个ItemView变成ViewPager,这个ViewPager有三个页面,会自动轮播,
    那我试着写个简单的例子,写完给你
      

  8.   

    我自己代码实现
    public class MainActivity extends AppCompatActivity {
        private RecyclerView recyclerView;
        private ArrayList<MyEntity> myData;
        public int index = -1;    MyPagerAdapter mMyPagerAdapter;
        MyAdapter adapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            recyclerView = (RecyclerView) findViewById(R.id.recyclerView);        initData();        //MyLayoutManager layoutManager = new MyLayoutManager(MyLayoutManager.VERTICAL);
             adapter = new MyAdapter();
            recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
            recyclerView.setAdapter(adapter);        List<View> viewList = new ArrayList<View>();        LayoutInflater layoutInflater = getLayoutInflater();
            View view1 = layoutInflater.inflate(R.layout.page1, null);
            View view2 = layoutInflater.inflate(R.layout.page2, null);
            View view3 = layoutInflater.inflate(R.layout.page3, null);
            viewList.add(view1);
            viewList.add(view2);
            viewList.add(view3);
            mMyPagerAdapter = new MyPagerAdapter(viewList);    }    //初始化数据
        private void initData() {
            int size = 30;
            myData = new ArrayList<>(size);
            for (int i = 0; i < size; i++) {
                MyEntity e = new MyEntity();
                e.setStr("str:" + i);
                myData.add(e);
            }
        }    //自定义Adapter
        class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {        @Override
            public int getItemViewType(int position) {
                if (position == index) {
                    return 1001;
                }
                return super.getItemViewType(position);
            }        @Override
            public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {            if (viewType == 1001) {
                    View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.recycler_item_viewpager, parent, false);                RecyclerView.ViewHolder viewHolder = new TwoViewHolder(v);
                    return viewHolder;
                }            View v = LayoutInflater.from(MainActivity.this).inflate(R.layout.recycler_view_item, parent, false);            RecyclerView.ViewHolder viewHolder = new MyViewHolder(v);
                return viewHolder;
            }        @Override
            public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
                if (position == index) {
                    return ;
                }
                MyEntity myEntity = myData.get(position);            MyViewHolder viewHolder = (MyViewHolder) holder;
                viewHolder.setStr(myEntity.getStr());
            }        @Override
            public int getItemCount() {
                return myData.size();
            }
        }    //自定义Holder
        class MyViewHolder extends RecyclerView.ViewHolder {
            private TextView strTv;
            public MyViewHolder(View itemView) {
                super(itemView);
                strTv = (TextView) itemView.findViewById(R.id.str);
                itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        index = getPosition();
                        adapter.notifyItemChanged(index);                }
                });
            }        public void setStr(String str) {
                strTv.setText(str);
            }    }
        class TwoViewHolder extends RecyclerView.ViewHolder {
            private ViewPager mViewPager;
            public TwoViewHolder(View itemView) {
                super(itemView);
                mViewPager = (ViewPager) itemView.findViewById(R.id.vp);            mViewPager.setAdapter(mMyPagerAdapter);
            }
        }
        private class MyPagerAdapter extends PagerAdapter {        private List<View> mViewList;        MyPagerAdapter(List<View> viewList) {
                mViewList = viewList;
            }        @Override
            public int getCount() {
                return mViewList.size();
            }        @Override
            public int getItemPosition(Object object) {
                return super.getItemPosition(object);
            }        @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == mViewList.get((int)Integer.parseInt(object.toString()));
            }        @Override
            public Object instantiateItem(ViewGroup container, int position) {
                View view = mViewList.get(position);
                container.addView(view);
               return position;
            }        @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(mViewList.get(position));
            }    }
    }activity_main<?xml version="1.0" encoding="utf-8"?>
    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </android.support.v7.widget.RecyclerView>VIewPager三个view<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff0000">    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="page1"
            android:textColor="#ffffff"
            android:textSize="20sp" /></RelativeLayout><?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff00ff">    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="page2"
            android:textColor="#ffffff"
            android:textSize="20sp" /></RelativeLayout><?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#00ff00">    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="page3"
            android:textColor="#ffffff"
            android:textSize="20sp" /></RelativeLayout>