Search in sources :

Example 1 with LinearLayoutHelper

use of com.alibaba.android.vlayout.layout.LinearLayoutHelper in project vlayout by alibaba.

the class VLayoutActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
    ;
    mFirstText = (TextView) findViewById(R.id.first);
    mLastText = (TextView) findViewById(R.id.last);
    mCountText = (TextView) findViewById(R.id.count);
    mTotalOffsetText = (TextView) findViewById(R.id.total_offset);
    final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.main_view);
    final VirtualLayoutManager layoutManager = new VirtualLayoutManager(this);
    layoutManager.setPerformanceMonitor(new PerformanceMonitor() {

        long start;

        long end;

        @Override
        public void recordStart(String phase, View view) {
            start = System.currentTimeMillis();
        }

        @Override
        public void recordEnd(String phase, View view) {
            end = System.currentTimeMillis();
            Log.d("VLayoutActivity", view.getClass().getName() + " " + (end - start));
        }
    });
    recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int i, int i2) {
            mFirstText.setText("First: " + layoutManager.findFirstVisibleItemPosition());
            mLastText.setText("Existing: " + MainViewHolder.existing + " Created: " + MainViewHolder.createdTimes);
            mCountText.setText("Count: " + recyclerView.getChildCount());
            mTotalOffsetText.setText("Total Offset: " + layoutManager.getOffsetToStart());
        }
    });
    recyclerView.setLayoutManager(layoutManager);
    // layoutManager.setReverseLayout(true);
    RecyclerView.ItemDecoration itemDecoration = new RecyclerView.ItemDecoration() {

        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int position = ((LayoutParams) view.getLayoutParams()).getViewPosition();
            outRect.set(4, 4, 4, 4);
        }
    };
    final RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
    recyclerView.setRecycledViewPool(viewPool);
    // recyclerView.addItemDecoration(itemDecoration);
    viewPool.setMaxRecycledViews(0, 20);
    layoutManager.setRecycleOffset(300);
    // viewLifeCycleListener should be used with setRecycleOffset()
    layoutManager.setViewLifeCycleListener(new ViewLifeCycleListener() {

        @Override
        public void onAppearing(View view) {
        // Log.e("ViewLifeCycleTest", "onAppearing: " + view);
        }

        @Override
        public void onDisappearing(View view) {
        // Log.e("ViewLifeCycleTest", "onDisappearing: " + view);
        }

        @Override
        public void onAppeared(View view) {
        // Log.e("ViewLifeCycleTest", "onAppeared: " + view);
        }

        @Override
        public void onDisappeared(View view) {
        // Log.e("ViewLifeCycleTest", "onDisappeared: " + view);
        }
    });
    layoutManager.setLayoutManagerCanScrollListener(new LayoutManagerCanScrollListener() {

        @Override
        public boolean canScrollVertically() {
            Log.i("vlayout", "canScrollVertically: ");
            return true;
        }

        @Override
        public boolean canScrollHorizontally() {
            Log.i("vlayout", "canScrollHorizontally: ");
            return true;
        }
    });
    final DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true);
    recyclerView.setAdapter(delegateAdapter);
    final List<DelegateAdapter.Adapter> adapters = new LinkedList<>();
    if (BANNER_LAYOUT) {
        adapters.add(new SubAdapter(this, new LinearLayoutHelper(), 1) {

            @Override
            public void onViewRecycled(MainViewHolder holder) {
                if (holder.itemView instanceof ViewPager) {
                    ((ViewPager) holder.itemView).setAdapter(null);
                }
            }

            @Override
            public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                if (viewType == 1)
                    return new MainViewHolder(LayoutInflater.from(VLayoutActivity.this).inflate(R.layout.view_pager, parent, false));
                return super.onCreateViewHolder(parent, viewType);
            }

            @Override
            public int getItemViewType(int position) {
                return 1;
            }

            @Override
            protected void onBindViewHolderWithOffset(MainViewHolder holder, int position, int offsetTotal) {
            }

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                if (holder.itemView instanceof ViewPager) {
                    ViewPager viewPager = (ViewPager) holder.itemView;
                    viewPager.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200));
                    // from position to get adapter
                    viewPager.setAdapter(new PagerAdapter(this, viewPool));
                }
            }
        });
    }
    if (FLOAT_LAYOUT) {
        FloatLayoutHelper layoutHelper = new FloatLayoutHelper();
        layoutHelper.setAlignType(FixLayoutHelper.BOTTOM_RIGHT);
        layoutHelper.setDefaultLocation(100, 400);
        LayoutParams layoutParams = new LayoutParams(150, 150);
        adapters.add(new SubAdapter(this, layoutHelper, 1, layoutParams));
    }
    if (LINEAR_LAYOUT) {
        LinearLayoutHelper layoutHelper1 = new LinearLayoutHelper();
        layoutHelper1.setBgColor(Color.YELLOW);
        layoutHelper1.setAspectRatio(2.0f);
        layoutHelper1.setMargin(10, 10, 10, 10);
        layoutHelper1.setPadding(10, 10, 10, 10);
        LinearLayoutHelper layoutHelper2 = new LinearLayoutHelper();
        layoutHelper2.setAspectRatio(4.0f);
        layoutHelper2.setDividerHeight(10);
        layoutHelper2.setMargin(10, 0, 10, 10);
        layoutHelper2.setPadding(10, 0, 10, 10);
        layoutHelper2.setBgColor(0xFFF5A623);
        final Handler mainHandler = new Handler(Looper.getMainLooper());
        adapters.add(new SubAdapter(this, layoutHelper1, 1) {

            @Override
            public void onBindViewHolder(final MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                final SubAdapter subAdapter = this;
            // mainHandler.postDelayed(new Runnable() {
            // @Override
            // public void run() {
            // //delegateAdapter.removeAdapter(subAdapter);
            // //notifyItemRemoved(1);
            // holder.itemView.setVisibility(View.GONE);
            // notifyItemChanged(1);
            // layoutManager.runAdjustLayout();
            // }
            // }, 2000L);
            }
        });
        adapters.add(new SubAdapter(this, layoutHelper2, 6) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                if (position % 2 == 0) {
                    LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);
                    layoutParams.mAspectRatio = 5;
                    holder.itemView.setLayoutParams(layoutParams);
                }
            }
        });
    }
    // {
    // RangeGridLayoutHelper layoutHelper = new RangeGridLayoutHelper(4);
    // layoutHelper.setBgColor(Color.GREEN);
    // layoutHelper.setWeights(new float[]{20f, 26.665f});
    // layoutHelper.setPadding(15, 15, 15, 15);
    // layoutHelper.setMargin(15, 50, 15, 150);
    // layoutHelper.setHGap(10);
    // layoutHelper.setVGap(10);
    // GridRangeStyle rangeStyle = new GridRangeStyle();
    // rangeStyle.setBgColor(Color.RED);
    // rangeStyle.setSpanCount(2);
    // rangeStyle.setWeights(new float[]{46.665f});
    // rangeStyle.setPadding(15, 15, 15, 15);
    // rangeStyle.setMargin(15, 15, 15, 15);
    // rangeStyle.setHGap(5);
    // rangeStyle.setVGap(5);
    // layoutHelper.addRangeStyle(0, 7, rangeStyle);
    // 
    // GridRangeStyle rangeStyle1 = new GridRangeStyle();
    // rangeStyle1.setBgColor(Color.YELLOW);
    // rangeStyle1.setSpanCount(2);
    // rangeStyle1.setWeights(new float[]{46.665f});
    // rangeStyle1.setPadding(15, 15, 15, 15);
    // rangeStyle1.setMargin(15, 15, 15, 15);
    // rangeStyle1.setHGap(5);
    // rangeStyle1.setVGap(5);
    // layoutHelper.addRangeStyle(8, 15, rangeStyle1);
    // 
    // GridRangeStyle rangeStyle2 = new GridRangeStyle();
    // rangeStyle2.setBgColor(Color.CYAN);
    // rangeStyle2.setSpanCount(2);
    // rangeStyle2.setWeights(new float[]{46.665f});
    // rangeStyle2.setPadding(15, 15, 15, 15);
    // rangeStyle2.setMargin(15, 15, 15, 15);
    // rangeStyle2.setHGap(5);
    // rangeStyle2.setVGap(5);
    // layoutHelper.addRangeStyle(16, 22, rangeStyle2);
    // GridRangeStyle rangeStyle3 = new GridRangeStyle();
    // rangeStyle3.setBgColor(Color.DKGRAY);
    // rangeStyle3.setSpanCount(1);
    // rangeStyle3.setWeights(new float[]{46.665f});
    // rangeStyle3.setPadding(15, 15, 15, 15);
    // rangeStyle3.setMargin(15, 15, 15, 15);
    // rangeStyle3.setHGap(5);
    // rangeStyle3.setVGap(5);
    // rangeStyle2.addChildRangeStyle(0, 2, rangeStyle3);
    // GridRangeStyle rangeStyle4 = new GridRangeStyle();
    // rangeStyle4.setBgColor(Color.BLUE);
    // rangeStyle4.setSpanCount(2);
    // rangeStyle4.setWeights(new float[]{46.665f});
    // rangeStyle4.setPadding(15, 15, 15, 15);
    // rangeStyle4.setMargin(15, 15, 15, 15);
    // rangeStyle4.setHGap(5);
    // rangeStyle4.setVGap(5);
    // rangeStyle2.addChildRangeStyle(3, 6, rangeStyle4);
    // 
    // GridRangeStyle rangeStyle5 = new GridRangeStyle();
    // rangeStyle5.setBgColor(Color.RED);
    // rangeStyle5.setSpanCount(2);
    // rangeStyle5.setPadding(15, 15, 15, 15);
    // rangeStyle5.setMargin(15, 15, 15, 15);
    // rangeStyle5.setHGap(5);
    // rangeStyle5.setVGap(5);
    // layoutHelper.addRangeStyle(23, 30, rangeStyle5);
    // GridRangeStyle rangeStyle6 = new GridRangeStyle();
    // rangeStyle6.setBgColor(Color.MAGENTA);
    // rangeStyle6.setSpanCount(2);
    // rangeStyle6.setPadding(15, 15, 15, 15);
    // rangeStyle6.setMargin(15, 15, 15, 15);
    // rangeStyle6.setHGap(5);
    // rangeStyle6.setVGap(5);
    // rangeStyle5.addChildRangeStyle(0, 7, rangeStyle6);
    // 
    // adapters.add(new SubAdapter(this, layoutHelper, 23));
    // }
    {
        SingleLayoutHelper layoutHelper = new SingleLayoutHelper();
        layoutHelper.setBgColor(Color.BLUE);
        layoutHelper.setMargin(0, 30, 0, 200);
        adapters.add(new SubAdapter(this, layoutHelper, 1, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100)));
    }
    if (STICKY_LAYOUT) {
        StickyLayoutHelper layoutHelper = new StickyLayoutHelper();
        // layoutHelper.setOffset(100);
        layoutHelper.setAspectRatio(4);
        adapters.add(new SubAdapter(this, layoutHelper, 1, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100)));
    }
    // {
    // final StaggeredGridLayoutHelper helper = new StaggeredGridLayoutHelper(3, 10);
    // helper.setBgColor(0xFF86345A);
    // adapters.add(new SubAdapter(this, helper, 4) {
    // 
    // @Override
    // public void onBindViewHolder(MainViewHolder holder, int position) {
    // super.onBindViewHolder(holder, position);
    // LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);
    // if (position % 2 == 0) {
    // layoutParams.mAspectRatio = 1.0f;
    // } else {
    // layoutParams.height = 340 + position % 7 * 20;
    // }
    // holder.itemView.setLayoutParams(layoutParams);
    // }
    // });
    // }
    {
        final GridLayoutHelper helper = new GridLayoutHelper(3, 4);
        helper.setBgColor(0xFF86345A);
        adapters.add(new SubAdapter(this, helper, 4) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);
                holder.itemView.setLayoutParams(layoutParams);
            }
        });
    }
    {
        RangeGridLayoutHelper layoutHelper = new RangeGridLayoutHelper(4);
        layoutHelper.setBgColor(Color.GREEN);
        layoutHelper.setWeights(new float[] { 20f, 26.665f });
        layoutHelper.setPadding(15, 15, 15, 15);
        layoutHelper.setMargin(15, 15, 15, 15);
        layoutHelper.setHGap(10);
        layoutHelper.setVGap(10);
        GridRangeStyle rangeStyle = new GridRangeStyle();
        rangeStyle.setBgColor(Color.RED);
        rangeStyle.setSpanCount(2);
        rangeStyle.setWeights(new float[] { 46.665f });
        rangeStyle.setPadding(15, 15, 15, 15);
        rangeStyle.setMargin(15, 15, 15, 15);
        rangeStyle.setHGap(5);
        rangeStyle.setVGap(5);
        layoutHelper.addRangeStyle(4, 7, rangeStyle);
        GridRangeStyle rangeStyle1 = new GridRangeStyle();
        rangeStyle1.setBgColor(Color.YELLOW);
        rangeStyle1.setSpanCount(2);
        rangeStyle1.setWeights(new float[] { 46.665f });
        rangeStyle1.setPadding(15, 15, 15, 15);
        rangeStyle1.setMargin(15, 15, 15, 15);
        rangeStyle1.setHGap(5);
        rangeStyle1.setVGap(5);
        layoutHelper.addRangeStyle(8, 11, rangeStyle1);
        adapters.add(new SubAdapter(this, layoutHelper, 16));
    }
    if (SINGLE_LAYOUT) {
        SingleLayoutHelper layoutHelper = new SingleLayoutHelper();
        layoutHelper.setBgColor(Color.rgb(135, 225, 90));
        layoutHelper.setAspectRatio(4);
        layoutHelper.setMargin(10, 20, 10, 20);
        layoutHelper.setPadding(10, 10, 10, 10);
        adapters.add(new SubAdapter(this, layoutHelper, 1, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100)));
    }
    if (COLUMN_LAYOUT) {
        ColumnLayoutHelper layoutHelper = new ColumnLayoutHelper();
        layoutHelper.setBgColor(0xff00f0f0);
        layoutHelper.setWeights(new float[] { 40.0f, Float.NaN, 40 });
        adapters.add(new SubAdapter(this, layoutHelper, 5) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                if (position == 0) {
                    LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);
                    layoutParams.mAspectRatio = 4;
                    holder.itemView.setLayoutParams(layoutParams);
                } else {
                    LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300);
                    layoutParams.mAspectRatio = Float.NaN;
                    holder.itemView.setLayoutParams(layoutParams);
                }
            }
        });
    }
    if (ONEN_LAYOUT) {
        OnePlusNLayoutHelper helper = new OnePlusNLayoutHelper();
        helper.setBgColor(0xff876384);
        helper.setAspectRatio(4.0f);
        helper.setColWeights(new float[] { 40f, 45f });
        helper.setMargin(10, 20, 10, 20);
        helper.setPadding(10, 10, 10, 10);
        adapters.add(new SubAdapter(this, helper, 2));
    }
    if (ONEN_LAYOUT) {
        OnePlusNLayoutHelper helper = new OnePlusNLayoutHelper();
        helper.setBgColor(0xffef8ba3);
        helper.setAspectRatio(2.0f);
        helper.setColWeights(new float[] { 40f });
        helper.setRowWeight(30f);
        helper.setMargin(10, 20, 10, 20);
        helper.setPadding(10, 10, 10, 10);
        adapters.add(new SubAdapter(this, helper, 4) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams lp = (LayoutParams) holder.itemView.getLayoutParams();
                if (position == 0) {
                    lp.rightMargin = 1;
                } else if (position == 1) {
                } else if (position == 2) {
                    lp.topMargin = 1;
                    lp.rightMargin = 1;
                }
            }
        });
    }
    if (ONEN_LAYOUT) {
        adapters.add(new SubAdapter(this, new OnePlusNLayoutHelper(), 0));
        OnePlusNLayoutHelper helper = new OnePlusNLayoutHelper();
        helper.setBgColor(0xff87e543);
        helper.setAspectRatio(1.8f);
        helper.setColWeights(new float[] { 33.33f, 50f, 40f });
        helper.setMargin(10, 20, 10, 20);
        helper.setPadding(10, 10, 10, 10);
        LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        adapters.add(new SubAdapter(this, helper, 3, lp) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams lp = (LayoutParams) holder.itemView.getLayoutParams();
                if (position == 0) {
                    lp.rightMargin = 1;
                }
            }
        });
    }
    if (COLUMN_LAYOUT) {
        adapters.add(new SubAdapter(this, new ColumnLayoutHelper(), 0));
        adapters.add(new SubAdapter(this, new ColumnLayoutHelper(), 4));
    }
    if (FIX_LAYOUT) {
        FixLayoutHelper layoutHelper = new FixLayoutHelper(10, 10);
        adapters.add(new SubAdapter(this, layoutHelper, 0));
        layoutHelper = new FixLayoutHelper(FixLayoutHelper.TOP_RIGHT, 20, 20);
        adapters.add(new SubAdapter(this, layoutHelper, 1) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200);
                holder.itemView.setLayoutParams(layoutParams);
            }
        });
    }
    if (GRID_LAYOUT) {
        GridLayoutHelper layoutHelper = new GridLayoutHelper(2);
        layoutHelper.setMargin(7, 0, 7, 0);
        layoutHelper.setWeights(new float[] { 46.665f });
        layoutHelper.setHGap(3);
        adapters.add(new SubAdapter(this, layoutHelper, 2));
        layoutHelper = new GridLayoutHelper(4);
        layoutHelper.setWeights(new float[] { 20f, 26.665f });
        layoutHelper.setMargin(7, 0, 7, 0);
        layoutHelper.setHGap(3);
        adapters.add(new SubAdapter(this, layoutHelper, 8));
    }
    if (GRID_LAYOUT) {
        adapters.add(new SubAdapter(this, new GridLayoutHelper(4), 0));
        GridLayoutHelper helper = new GridLayoutHelper(4);
        helper.setAspectRatio(4f);
        // helper.setColWeights(new float[]{40, 20, 30, 30});
        // helper.setMargin(0, 10, 0, 10);
        helper.setGap(10);
        adapters.add(new SubAdapter(this, helper, 80) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams lp = (LayoutParams) holder.itemView.getLayoutParams();
            // lp.bottomMargin = 1;
            // lp.rightMargin = 1;
            }
        });
    }
    if (FIX_LAYOUT) {
        adapters.add(new SubAdapter(this, new ScrollFixLayoutHelper(20, 20), 1) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams layoutParams = new LayoutParams(200, 200);
                holder.itemView.setLayoutParams(layoutParams);
            }
        });
    }
    if (LINEAR_LAYOUT)
        adapters.add(new SubAdapter(this, new LinearLayoutHelper(), 10));
    if (GRID_LAYOUT) {
        GridLayoutHelper helper = new GridLayoutHelper(3);
        helper.setMargin(0, 10, 0, 10);
        adapters.add(new SubAdapter(this, helper, 3));
    }
    if (STAGGER_LAYOUT) {
        // adapters.add(new SubAdapter(this, new StaggeredGridLayoutHelper(2, 0), 0));
        final StaggeredGridLayoutHelper helper = new StaggeredGridLayoutHelper(2, 10);
        helper.setMargin(20, 10, 10, 10);
        helper.setPadding(10, 10, 20, 10);
        helper.setBgColor(0xFF86345A);
        adapters.add(new SubAdapter(this, helper, 27) {

            @Override
            public void onBindViewHolder(MainViewHolder holder, int position) {
                super.onBindViewHolder(holder, position);
                LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200);
                if (position % 2 == 0) {
                    layoutParams.mAspectRatio = 1.0f;
                } else {
                    layoutParams.height = 340 + position % 7 * 20;
                }
                holder.itemView.setLayoutParams(layoutParams);
            }
        });
    }
    if (COLUMN_LAYOUT) {
    // adapters.add(new SubAdapter(this, new ColumnLayoutHelper(), 3));
    }
    if (GRID_LAYOUT) {
    // adapters.add(new SubAdapter(this, new GridLayoutHelper(4), 24));
    }
    adapters.add(new FooterAdapter(recyclerView, VLayoutActivity.this, new GridLayoutHelper(1), 1));
    delegateAdapter.setAdapters(adapters);
    final Handler mainHandler = new Handler(Looper.getMainLooper());
    trigger = new Runnable() {

        @Override
        public void run() {
        // recyclerView.scrollToPosition(22);
        // recyclerView.getAdapter().notifyDataSetChanged();
        // mainHandler.postDelayed(trigger, 1000);
        // List<DelegateAdapter.Adapter> newAdapters = new ArrayList<>();
        // newAdapters.add((new SubAdapter(VLayoutActivity.this, new ColumnLayoutHelper(), 3)));
        // newAdapters.add((new SubAdapter(VLayoutActivity.this, new GridLayoutHelper(4), 24)));
        // delegateAdapter.addAdapter(0, new SubAdapter(VLayoutActivity.this, new ColumnLayoutHelper(), 3));
        // delegateAdapter.addAdapter(1, new SubAdapter(VLayoutActivity.this, new GridLayoutHelper(4), 24));
        // delegateAdapter.notifyDataSetChanged();
        }
    };
    findViewById(R.id.jump).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            EditText position = (EditText) findViewById(R.id.position);
            if (!TextUtils.isEmpty(position.getText())) {
                try {
                    int pos = Integer.parseInt(position.getText().toString());
                    recyclerView.scrollToPosition(pos);
                } catch (Exception e) {
                    Log.e("VlayoutActivity", e.getMessage(), e);
                }
            } else {
                recyclerView.requestLayout();
            }
        // FooterAdapter footer = (FooterAdapter)adapters.get(adapters.size() - 1);
        // footer.toggleFoot();
        }
    });
    mainHandler.postDelayed(trigger, 1000);
    mSwipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {

        @Override
        public void onRefresh() {
            mainHandler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    mSwipeRefreshLayout.setRefreshing(false);
                }
            }, 2000L);
        }
    });
    setListenerToRootView();
}
Also used : ScrollFixLayoutHelper(com.alibaba.android.vlayout.layout.ScrollFixLayoutHelper) FixLayoutHelper(com.alibaba.android.vlayout.layout.FixLayoutHelper) ScrollFixLayoutHelper(com.alibaba.android.vlayout.layout.ScrollFixLayoutHelper) DelegateAdapter(com.alibaba.android.vlayout.DelegateAdapter) RecyclablePagerAdapter(com.alibaba.android.vlayout.RecyclablePagerAdapter) ColumnLayoutHelper(com.alibaba.android.vlayout.layout.ColumnLayoutHelper) RangeGridLayoutHelper(com.alibaba.android.vlayout.layout.RangeGridLayoutHelper) StaggeredGridLayoutHelper(com.alibaba.android.vlayout.layout.StaggeredGridLayoutHelper) GridLayoutHelper(com.alibaba.android.vlayout.layout.GridLayoutHelper) RecyclablePagerAdapter(com.alibaba.android.vlayout.RecyclablePagerAdapter) DelegateAdapter(com.alibaba.android.vlayout.DelegateAdapter) SingleLayoutHelper(com.alibaba.android.vlayout.layout.SingleLayoutHelper) StickyLayoutHelper(com.alibaba.android.vlayout.layout.StickyLayoutHelper) ViewLifeCycleListener(com.alibaba.android.vlayout.extend.ViewLifeCycleListener) EditText(android.widget.EditText) Rect(android.graphics.Rect) LayoutParams(com.alibaba.android.vlayout.VirtualLayoutManager.LayoutParams) LinearLayoutHelper(com.alibaba.android.vlayout.layout.LinearLayoutHelper) ViewGroup(android.view.ViewGroup) Handler(android.os.Handler) OnePlusNLayoutHelper(com.alibaba.android.vlayout.layout.OnePlusNLayoutHelper) RangeGridLayoutHelper(com.alibaba.android.vlayout.layout.RangeGridLayoutHelper) View(android.view.View) RecyclerView(android.support.v7.widget.RecyclerView) TextView(android.widget.TextView) ViewPager(android.support.v4.view.ViewPager) LinkedList(java.util.LinkedList) LayoutManagerCanScrollListener(com.alibaba.android.vlayout.extend.LayoutManagerCanScrollListener) RecyclerView(android.support.v7.widget.RecyclerView) PerformanceMonitor(com.alibaba.android.vlayout.extend.PerformanceMonitor) VirtualLayoutManager(com.alibaba.android.vlayout.VirtualLayoutManager) StaggeredGridLayoutHelper(com.alibaba.android.vlayout.layout.StaggeredGridLayoutHelper) GridRangeStyle(com.alibaba.android.vlayout.layout.RangeGridLayoutHelper.GridRangeStyle) FloatLayoutHelper(com.alibaba.android.vlayout.layout.FloatLayoutHelper) OnRefreshListener(android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener)

Example 2 with LinearLayoutHelper

use of com.alibaba.android.vlayout.layout.LinearLayoutHelper in project Tangram-Android by alibaba.

the class BannerCard method convertLayoutHelper.

@Nullable
@Override
public LayoutHelper convertLayoutHelper(LayoutHelper oldHelper) {
    LinearLayoutHelper helper = new LinearLayoutHelper();
    helper.setItemCount(getCells().size());
    return helper;
}
Also used : LinearLayoutHelper(com.alibaba.android.vlayout.layout.LinearLayoutHelper) Nullable(android.support.annotation.Nullable)

Example 3 with LinearLayoutHelper

use of com.alibaba.android.vlayout.layout.LinearLayoutHelper in project Tangram-Android by alibaba.

the class LinearCard method convertLayoutHelper.

@Nullable
@Override
public LayoutHelper convertLayoutHelper(@Nullable LayoutHelper oldHelper) {
    LinearLayoutHelper helper = null;
    if (oldHelper instanceof LinearLayoutHelper) {
        helper = (LinearLayoutHelper) oldHelper;
    } else {
        helper = new LinearLayoutHelper();
    }
    if (style != null) {
        helper.setBgColor(style.bgColor);
        if (!Float.isNaN(style.aspectRatio)) {
            helper.setAspectRatio(style.aspectRatio);
        }
        if (style.extras != null && style.extras.containsKey(KEY_DIVIDE_HEIGHT)) {
            helper.setDividerHeight(Style.parseSize(style.extras.getString(KEY_DIVIDE_HEIGHT), 0));
        }
    }
    helper.setItemCount(mCells.size());
    helper.setMargin(style.margin[Style.MARGIN_LEFT_INDEX], style.margin[Style.MARGIN_TOP_INDEX], style.margin[Style.MARGIN_RIGHT_INDEX], style.margin[Style.MARGIN_BOTTOM_INDEX]);
    helper.setPadding(style.padding[Style.MARGIN_LEFT_INDEX], style.padding[Style.MARGIN_TOP_INDEX], style.padding[Style.MARGIN_RIGHT_INDEX], style.padding[Style.MARGIN_BOTTOM_INDEX]);
    return helper;
}
Also used : LinearLayoutHelper(com.alibaba.android.vlayout.layout.LinearLayoutHelper) Nullable(android.support.annotation.Nullable)

Example 4 with LinearLayoutHelper

use of com.alibaba.android.vlayout.layout.LinearLayoutHelper in project GitTest by xiaoxige.

the class MainActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    VirtualLayoutManager manager = new VirtualLayoutManager(this);
    recyclerView.setLayoutManager(manager);
    DelegateAdapter adapter = new DelegateAdapter(manager, false);
    recyclerView.setAdapter(adapter);
    MyAdapter4 myAdapter4 = new MyAdapter4(this, new SingleLayoutHelper());
    GridLayoutHelper gridLayoutHelper = new GridLayoutHelper(4);
    gridLayoutHelper.setBgColor(Color.GREEN);
    gridLayoutHelper.setAutoExpand(false);
    gridLayoutHelper.setPadding(60, 0, 60, 0);
    ScrollFixLayoutHelper scrollFixLayoutHelper = new ScrollFixLayoutHelper(ScrollFixLayoutHelper.TOP_LEFT, 30, 30);
    adapters = new ArrayList<>();
    adapters.add(myAdapter4);
    adapters.add(new MyAdapter1(this, new LinearLayoutHelper()));
    adapters.add(new MyAdapter1(this, new LinearLayoutHelper()));
    adapters.add(new MyAdapter1(this, new LinearLayoutHelper()));
    adapters.add(new MyAdapter2(this, gridLayoutHelper));
    adapters.add(new MyAdapter5(this, scrollFixLayoutHelper));
    adapter.addAdapters(adapters);
}
Also used : DelegateAdapter(com.alibaba.android.vlayout.DelegateAdapter) SingleLayoutHelper(com.alibaba.android.vlayout.layout.SingleLayoutHelper) LinearLayoutHelper(com.alibaba.android.vlayout.layout.LinearLayoutHelper) ScrollFixLayoutHelper(com.alibaba.android.vlayout.layout.ScrollFixLayoutHelper) VirtualLayoutManager(com.alibaba.android.vlayout.VirtualLayoutManager) GridLayoutHelper(com.alibaba.android.vlayout.layout.GridLayoutHelper)

Example 5 with LinearLayoutHelper

use of com.alibaba.android.vlayout.layout.LinearLayoutHelper in project CustomViews by AndroidStudy233.

the class VLayoutActivity method initUI.

private void initUI() {
    // 创建VirtualLayoutManager对象
    VirtualLayoutManager manager = new VirtualLayoutManager(this);
    recyclerView.setLayoutManager(manager);
    // 设置组件复用回收池
    RecyclerView.RecycledViewPool viewPool = new RecyclerView.RecycledViewPool();
    recyclerView.setRecycledViewPool(viewPool);
    viewPool.setMaxRecycledViews(0, 10);
    // 添加divider
    RecyclerView.ItemDecoration itemDecoration = new RecyclerView.ItemDecoration() {

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int position = ((VirtualLayoutManager.LayoutParams) view.getLayoutParams()).getViewPosition();
            outRect.set(1, 1, 1, 4);
        }
    };
    recyclerView.addItemDecoration(itemDecoration);
    // 设置适配器, 参数2 当true的时候,不论是不是属于同一个子adapter,相同类型的item都能复用。
    // 表示它们共享一个类型。 当false的时候,不同子adapter之间的类型不共享
    DelegateAdapter delegateAdapter = new DelegateAdapter(manager, true);
    recyclerView.setAdapter(delegateAdapter);
    // 下面再让delegateAdapter添加所有的adapter, 就可以实现不同的类型的条目了
    final List<DelegateAdapter.Adapter> adapters = new LinkedList<>();
    // 第一个0    使用LinearLayoutHelper实现ViewPager(img)
    VLayout1thAdapter adapter1th = new VLayout1thAdapter(this, new LinearLayoutHelper(), 1);
    adapters.add(adapter1th);
    // 第二个1    浮动的一个正方形
    FloatLayoutHelper layoutHelper2th = new FloatLayoutHelper();
    layoutHelper2th.setAlignType(FixLayoutHelper.TOP_RIGHT);
    // 设置默认位置
    layoutHelper2th.setDefaultLocation(100, 400);
    VirtualLayoutManager.LayoutParams layoutParams = new VirtualLayoutManager.LayoutParams(200, 200);
    SimpleVLayoutAdapter adapter2th = new SimpleVLayoutAdapter(this, layoutHelper2th, 1, layoutParams);
    adapters.add(adapter2th);
    // 第三个2    就是一个简单的灰色条目
    LinearLayoutHelper layoutHelper3th = new LinearLayoutHelper();
    // 不通过params设置高度, 而通过宽高比实现 宽:高=2
    layoutHelper3th.setAspectRatio(2.0f);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper3th, 1));
    // 第四个3-8    6个条目, 位置偶数的高度大一点
    LinearLayoutHelper layoutHelper4th = new LinearLayoutHelper();
    layoutHelper4th.setAspectRatio(2.0f);
    layoutHelper4th.setDividerHeight(10);
    layoutHelper4th.setMargin(0, 30, 0, 10);
    layoutHelper4th.setPadding(10, 30, 10, 10);
    layoutHelper4th.setBgColor(0xFFA9FFF8);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper4th, 6) {

        @Override
        public void onBindViewHolder(VLayoutViewHolder holder, int position) {
            /*
                    这里主要提一个AspectRatio的优先级问题, LayoutHelper的AspectRatio是要低于
                    layoutParams的AspectRatio的, 因此上面设置的宽高比2就无效了
                    另外这里的position指的是SimpleVLayoutAdapter下的条目item, 是从0开始的
                    别和总共的Recycler弄混了
                 */
            VirtualLayoutManager.LayoutParams layoutParams = new VirtualLayoutManager.LayoutParams(VirtualLayoutManager.LayoutParams.MATCH_PARENT, 300);
            if (position % 2 == 0) {
                layoutParams.mAspectRatio = 3;
            } else {
                layoutParams.mAspectRatio = 5;
            }
            holder.itemView.setLayoutParams(layoutParams);
        }
    });
    // 第五个9  这个牛逼了, 就是头部粘性效果
    StickyLayoutHelper layoutHelper5th = new StickyLayoutHelper();
    // 距离头部多少高度粘性
    layoutHelper5th.setOffset(1);
    layoutHelper5th.setAspectRatio(4);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper5th, 1));
    // 第六个10-14  一行多个, column
    ColumnLayoutHelper layoutHelper6th = new ColumnLayoutHelper();
    layoutHelper6th.setBgColor(0xff00f0f0);
    layoutHelper6th.setWeights(new float[] { 10, 10, 20, 20, 40 });
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper6th, 5) {

        @Override
        public void onBindViewHolder(VLayoutViewHolder holder, int position) {
            super.onBindViewHolder(holder, position);
        /*
                    同样的这里的weight优先级要低于LayoutParams的AspectRatio
                    如果设置LayoutParams的高度, 然后设置LayoutParams的AspectRatio, 还是会根据高度重新计算宽度
                 */
        }
    });
    // 第七个15    底部粘性效果  构造传个false
    StickyLayoutHelper layoutHelper7th = new StickyLayoutHelper(false);
    layoutHelper7th.setOffset(100);
    VirtualLayoutManager.LayoutParams layoutParams1 = new VirtualLayoutManager.LayoutParams(VirtualLayoutManager.LayoutParams.MATCH_PARENT, 200);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper7th, 1, layoutParams1));
    // 第八个固定布局16
    FixLayoutHelper layoutHelper8th = new FixLayoutHelper(FixLayoutHelper.TOP_LEFT, 100, 100);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper8th, 1) {

        @Override
        public void onBindViewHolder(VLayoutViewHolder holder, int position) {
            super.onBindViewHolder(holder, position);
            VirtualLayoutManager.LayoutParams layoutParams = new VirtualLayoutManager.LayoutParams(200, 200);
            holder.itemView.setLayoutParams(layoutParams);
        }
    });
    // 第九个17-18    1拖N小试
    OnePlusNLayoutHelper layoutHelper9th = new OnePlusNLayoutHelper();
    layoutHelper9th.setBgColor(0xffE551DC);
    layoutHelper9th.setAspectRatio(4.0f);
    // 2列, 分别占20% 40%
    layoutHelper9th.setColWeights(new float[] { 20, 40 });
    layoutHelper9th.setMargin(20, 20, 20, 20);
    // layoutHelper7th.setPadding(10, 10, 10, 10);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper9th, 2));
    // 第十个19-22     继续1拖N    这种布局数量只能有1-5 而且怎么排是里面写好的
    OnePlusNLayoutHelper layoutHelper10th = new OnePlusNLayoutHelper();
    layoutHelper10th.setBgColor(0xff635EF8);
    // 宽高比2:1
    layoutHelper10th.setAspectRatio(2.0f);
    // 第一行占30%高度
    layoutHelper10th.setRowWeight(30f);
    // 第一列30%, 剩下的占满
    layoutHelper10th.setColWeights(new float[] { 30f });
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper10th, 4) {

        @Override
        public void onBindViewHolder(VLayoutViewHolder holder, int position) {
            super.onBindViewHolder(holder, position);
            VirtualLayoutManager.LayoutParams lp = (VirtualLayoutManager.LayoutParams) holder.itemView.getLayoutParams();
            if (position == 0) {
                lp.rightMargin = 1;
            } else if (position == 1) {
            } else if (position == 2) {
                lp.topMargin = 1;
                lp.rightMargin = 1;
            }
        }
    });
    // 第十一个23-50     瀑布流2列, 条目间距10
    final StaggeredGridLayoutHelper layoutHelper11th = new StaggeredGridLayoutHelper(2, 10);
    layoutHelper11th.setBgColor(0xFF86345A);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper11th, 28) {

        @Override
        public void onBindViewHolder(VLayoutViewHolder holder, int position) {
            super.onBindViewHolder(holder, position);
            VirtualLayoutManager.LayoutParams layoutParams = new VirtualLayoutManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200);
            if (position % 2 == 0) {
                // 偶数位置正方形
                layoutParams.mAspectRatio = 1.0f;
            } else {
                // 奇数位置最低高度300
                layoutParams.height = 300 + position % 7 * 30;
            }
            holder.itemView.setLayoutParams(layoutParams);
        }
    });
    // 第十二个51-70    Grid布局, 2列
    GridLayoutHelper layoutHelper12th = new GridLayoutHelper(2);
    layoutHelper12th.setAspectRatio(2f);
    layoutHelper12th.setMargin(0, 0, 0, 0);
    // 第一列占50%
    layoutHelper12th.setWeights(new float[] { 50 });
    // setVGap竖直 setHGap水平间距
    layoutHelper12th.setGap(5);
    adapters.add(new SimpleVLayoutAdapter(this, layoutHelper12th, 20));
    // 最后将所有的adapter设置给delegate
    delegateAdapter.setAdapters(adapters);
}
Also used : FixLayoutHelper(com.alibaba.android.vlayout.layout.FixLayoutHelper) SimpleVLayoutAdapter(com.shiqkuangsan.mycustomviews.ui.activity.vlayout.subadapter.SimpleVLayoutAdapter) VLayout1thAdapter(com.shiqkuangsan.mycustomviews.ui.activity.vlayout.subadapter.VLayout1thAdapter) DelegateAdapter(com.alibaba.android.vlayout.DelegateAdapter) ColumnLayoutHelper(com.alibaba.android.vlayout.layout.ColumnLayoutHelper) StaggeredGridLayoutHelper(com.alibaba.android.vlayout.layout.StaggeredGridLayoutHelper) GridLayoutHelper(com.alibaba.android.vlayout.layout.GridLayoutHelper) DelegateAdapter(com.alibaba.android.vlayout.DelegateAdapter) StickyLayoutHelper(com.alibaba.android.vlayout.layout.StickyLayoutHelper) SimpleVLayoutAdapter(com.shiqkuangsan.mycustomviews.ui.activity.vlayout.subadapter.SimpleVLayoutAdapter) Rect(android.graphics.Rect) LinearLayoutHelper(com.alibaba.android.vlayout.layout.LinearLayoutHelper) OnePlusNLayoutHelper(com.alibaba.android.vlayout.layout.OnePlusNLayoutHelper) View(android.view.View) ContentView(org.xutils.view.annotation.ContentView) RecyclerView(android.support.v7.widget.RecyclerView) VLayout1thAdapter(com.shiqkuangsan.mycustomviews.ui.activity.vlayout.subadapter.VLayout1thAdapter) LinkedList(java.util.LinkedList) RecyclerView(android.support.v7.widget.RecyclerView) VirtualLayoutManager(com.alibaba.android.vlayout.VirtualLayoutManager) StaggeredGridLayoutHelper(com.alibaba.android.vlayout.layout.StaggeredGridLayoutHelper) FloatLayoutHelper(com.alibaba.android.vlayout.layout.FloatLayoutHelper)

Aggregations

LinearLayoutHelper (com.alibaba.android.vlayout.layout.LinearLayoutHelper)11 Nullable (android.support.annotation.Nullable)6 DelegateAdapter (com.alibaba.android.vlayout.DelegateAdapter)5 VirtualLayoutManager (com.alibaba.android.vlayout.VirtualLayoutManager)5 GridLayoutHelper (com.alibaba.android.vlayout.layout.GridLayoutHelper)5 RecyclerView (android.support.v7.widget.RecyclerView)4 StickyLayoutHelper (com.alibaba.android.vlayout.layout.StickyLayoutHelper)4 Rect (android.graphics.Rect)3 View (android.view.View)3 FixLayoutHelper (com.alibaba.android.vlayout.layout.FixLayoutHelper)3 OnePlusNLayoutHelper (com.alibaba.android.vlayout.layout.OnePlusNLayoutHelper)3 ScrollFixLayoutHelper (com.alibaba.android.vlayout.layout.ScrollFixLayoutHelper)3 LinkedList (java.util.LinkedList)3 Handler (android.os.Handler)2 ViewPager (android.support.v4.view.ViewPager)2 ViewGroup (android.view.ViewGroup)2 EditText (android.widget.EditText)2 TextView (android.widget.TextView)2 RecyclablePagerAdapter (com.alibaba.android.vlayout.RecyclablePagerAdapter)2 LayoutParams (com.alibaba.android.vlayout.VirtualLayoutManager.LayoutParams)2