Android 사용 RecyclerView 모방 미 단 분류 인터페이스

RecyclerView 는 현재 로 서 는 낯 설 지 않 을 것 입 니 다.회사 프로젝트 에서 우리 가 사용 해 온 listview 와 gridview.어느 날 제품 디자인 은 미 단의 분류 인터페이스 에 따라 하나의 화면 을 디자인 했다.나 는 gridview 로 이런 효 과 를 실현 할 수 없다 는 것 을 발 견 했 기 때문에 RecyclerView 가 좋 은 컨트롤 이 라 고 생각 했다.여러분 과 나 눠 보도 록 하 겠 습 니 다.
효과 도


간단 한 소개
RecyclerView 와 ListView 의 원 리 는 유사 하 다.모두 소량의 View 만 유지 하고 대량의 데이터 세트 를 보 여줄 수 있다.RecyclerView 는 다음 과 같은 두 가지 방식 으로 데이터 의 전시 와 처 리 를 간소화 했다.
*LayoutManager 를 사용 하여 모든 아 이 템 의 배열 방식 을 확인 합 니 다.
*항목 추가 및 삭제 에 기본 애니메이션 효과 제공
사용법 주의사항
LayoutManager:모든 아 이 템 을 어떻게 배열 하고 배치 하 는 지,언제 보 여주 고 숨 기 는 지 확인 합 니 다.View 를 회수 하거나 다시 사용 할 때 LayoutManager 는 어댑터 에 새로운 데 이 터 를 요청 하여 오래된 데 이 터 를 교체 합 니 다.이 메커니즘 은 너무 많은 View 를 만 들 거나 findViewById 방법 을 자주 호출 하 는 것 을 피 합 니 다(ListView 원리 와 유사 합 니 다).
현재 SDK 에 서 는 세 가지 자체 Layout Manager 를 제공 하고 있 습 니 다.
  • LinearLayoutManager
  • GridLayoutManager
  • StaggeredGridLayoutManager
  • 코드
    레이아웃 파일
    activity_main.xml
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/activity_main"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:background="#7e6c6c"
      tools:context="cn.bluemobi.dylan.recyclerviewdemo.MainActivity">
    
    
      <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:background="#FFFFFF"
        android:paddingLeft="8dp"
        android:paddingBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="200dp" />
    </RelativeLayout>
    item.xml
    
    <?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:layout_width="70dp"
      android:layout_height="match_parent"
      android:orientation="vertical">
    
      <ImageView
        android:id="@+id/iv"
        android:layout_width="60dp"
        android:layout_height="75dp"
        app:srcCompat="@mipmap/ic_category_0" />
    
      <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:text="TextView" />
    
    </LinearLayout>
    Activity 의 코드
    RvAdpter.java
    
    package cn.bluemobi.dylan.recyclerviewdemo;
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.util.List;
    
    /**
     * Created by yuandl on 2016-11-01.
     */
    
    public class RvAdpter extends RecyclerView.Adapter<RvAdpter.MyViewHolder> {
      private Context context;
      private List<Integer> datas;
    
      public RvAdpter(Context context, List<Integer> datas) {
        this.context = context;
        this.datas = datas;
      }
    
      @Override
      public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View contentView= LayoutInflater.from(context).inflate(R.layout.item,parent,false);
        MyViewHolder viewHolder=new MyViewHolder(contentView);
        return viewHolder;
      }
    
      @Override
      public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.imageView.setImageResource(datas.get(position));
        holder.tv.setText("  "+position);
      }
    
      @Override
      public int getItemCount() {
        return datas==null?0:datas.size();
      }
    
      public class MyViewHolder extends RecyclerView.ViewHolder {
        private ImageView imageView;
        public TextView tv;
    
        public MyViewHolder(View itemView) {
          super(itemView);
          imageView = (ImageView) itemView.findViewById(R.id.iv);
          tv = (TextView) itemView.findViewById(R.id.tv);
        }
      }
    }
    MainActivity.java
    
    package cn.bluemobi.dylan.recyclerviewdemo;
    
    import android.content.res.Resources;
    import android.graphics.Canvas;
    import android.graphics.Rect;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.StaggeredGridLayoutManager;
    import android.view.View;
    
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
      private RecyclerView rv;
    
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv = (RecyclerView) findViewById(R.id.rv);
        initData();
      }
    
      /**
       *      
       */
    
      private void initData() {
        List<Integer> datas = new ArrayList<>();
        for (int i = 0; i < 38; i++) {
          Resources res = getResources();
          datas.add(res.getIdentifier("ic_category_" + i, "mipmap", getPackageName()));
        }
        /**
         *       item        
         * LinearLayoutManager    ListView   
         GridLayoutManager   GridView   
         StaggeredGridLayoutManager    
         */
        rv.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL));
        rv.addItemDecoration(new RecyclerView.ItemDecoration() {
          @Override
          public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    
            outRect.left = 10;
            outRect.top = 10;
            outRect.top = 10;
          }
        });
        rv.setAdapter(new RvAdpter(this, datas));
      }
    }
    
    
    GitHub 주소
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기