zoukankan      html  css  js  c++  java
  • RecyclerView

    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Canvas;
    import android.graphics.Rect;
    import android.graphics.drawable.Drawable;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.View;
    
    /**
     * Created by lenovo on 2017/10/13.
     */
    
    public class DividerItemDecoration extends RecyclerView.ItemDecoration{
        private static final int[] ATTRS = new int[]{
                android.R.attr.listDivider
        };
    
        public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
    
        public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
    
        private Drawable mDivider;
    
        private int mOrientation;
        public DividerItemDecoration(Context context, int orientation) {
            final TypedArray a = context.obtainStyledAttributes(ATTRS);
            mDivider = a.getDrawable(0);
          a.recycle();
          setOrientation(orientation);
       }
    
        public void setOrientation(int orientation) {
            if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {
                throw new IllegalArgumentException("invalid orientation");
            }
            mOrientation = orientation;
        }
        @Override
        public void onDraw(Canvas c, RecyclerView parent) {
            Log.v("recyclerview - itemdecoration", "onDraw()");
    
            if (mOrientation == VERTICAL_LIST) {
                drawVertical(c, parent);
            } else {
                drawHorizontal(c, parent);
            }
    
        }
    
    
        private void drawHorizontal(Canvas c, RecyclerView parent) {
            final int top = parent.getPaddingTop();
            final int bottom = parent.getHeight() - parent.getPaddingBottom();
    
            final int childCount = parent.getChildCount();
            for (int i = 0; i < childCount; i++) {
                final View child = parent.getChildAt(i);
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                        .getLayoutParams();
                final int left = child.getRight() + params.rightMargin;
                final int right = left + mDivider.getIntrinsicHeight();
                mDivider.setBounds(left, top, right, bottom);
                mDivider.draw(c);
            }
        }
    
        private void drawVertical(Canvas c, RecyclerView parent) {
            final int left = parent.getPaddingLeft();
            final int right = parent.getWidth() - parent.getPaddingRight();
    
            final int childCount = parent.getChildCount();
            for (int i = 0; i < childCount; i++) {
                final View child = parent.getChildAt(i);
                android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(parent.getContext());
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                        .getLayoutParams();
                final int top = child.getBottom() + params.bottomMargin;
                final int bottom = top + mDivider.getIntrinsicHeight();
                mDivider.setBounds(left, top, right, bottom);
                mDivider.draw(c);
            }
        }
        @Override
        public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {
            if (mOrientation == VERTICAL_LIST) {
                outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
            } else {
                outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
            }
        }
    
    }

    MainActivity

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.DefaultItemAnimator;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.StaggeredGridLayoutManager;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    
        private RecyclerView recycler;
        private ArrayList<Object> list;
        private ArrayList<String> mDatas;
        private HomeAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initData();
             recycler= (RecyclerView) findViewById(R.id.recycler);
            findViewById(R.id.btlist).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //线性式
                    recycler.setLayoutManager(new LinearLayoutManager(MainActivity.this));
                }
            });
    
            recycler.setAdapter(mAdapter = new HomeAdapter());
            //线性分割线
            recycler.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL_LIST));
            recycler.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL_LIST));
            findViewById(R.id.btgrid).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //网格式
                    recycler.setLayoutManager(new GridLayoutManager(MainActivity.this,3));
                }
            });
                    //瀑布流
                    recycler.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
    
           //添加动画
            recycler.setItemAnimator(new DefaultItemAnimator());
          findViewById(R.id.btjia).setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View view) {
                  mAdapter.addData(1);
              }
          });
            findViewById(R.id.btjian).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    mAdapter.removeData(1);
                }
            });
        }
        protected void initData()
        {
            mDatas = new ArrayList<String>();
            for (int i =0; i <20; i++)
            {
                mDatas.add("" + i);
            }
        }
    
    
        class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
        {
    
            @Override
            public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
            {
                MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                        MainActivity.this).inflate(R.layout.item, parent,
                        false));
                return holder;
            }
    
            @Override
            public void onBindViewHolder(MyViewHolder holder, int position)
            {
                holder.tv.setText(mDatas.get(position));
            }
    
            @Override
            public int getItemCount()
            {
                return mDatas.size();
            }
    
            public void addData(int i) {
                mDatas.add(i, "Insert One");
                mAdapter.notifyItemInserted(i);
            }
    
            public void removeData(int i) {
                mDatas.remove(i);
                mAdapter.notifyItemRemoved(i);
            }
    
            class MyViewHolder extends RecyclerView.ViewHolder
            {
    
                TextView tv;
    
                public MyViewHolder(View view)
                {
                    super(view);
                    tv = (TextView) view.findViewById(R.id.tv);
                }
            }
        }
    
    
    }


    依赖
    compile 'com.android.support:recyclerview-v7:21.0.+'
    
    
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
    
        android:orientation="vertical" xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.bwie.wangshaoliang20171013.MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <Button
        android:id="@+id/btjia"
        android:textSize="20dp"
        android:text="+"
            android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
        <Button
            android:id="@+id/btjian"
            android:textSize="20dp"
            android:text="-"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <Button
            android:id="@+id/btlist"
            android:text="list"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <Button
            android:id="@+id/btgrid"
            android:text="grid"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <Button
            android:id="@+id/btflow"
            android:text="flow"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
        <android.support.v7.widget.RecyclerView
        android:divider="#ffff0000"
        android:dividerHeight="10dp"
            android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler"
        ></android.support.v7.widget.RecyclerView>
    
    </LinearLayout>

     
  • 相关阅读:
    【CF1523E】Crypto Lights
    【洛谷P3228】数列
    【洛谷P4319】变化的道路
    Educational Codeforces Round 110
    【洛谷P2444】病毒
    一、Java语言基础(1)_走进java——第一个java程序
    android studio 调试smali
    Kickstart Round B 2018
    Proj THUDBFuzz Paper Reading: A Review of Machine Learning Applications in Fuzzing
    Proj THUDBFuzz Paper Reading: Fuzzing: Hack, Art, and Science
  • 原文地址:https://www.cnblogs.com/shangliang88/p/7660678.html
Copyright © 2011-2022 走看看